; assembly | /* r2dec pseudo code output */ | /* bdlmt_threadmultiplexor.t/none @ 0x407d10 */ | #include | ; (fcn) method.int_BloombergLP::bslmt::ThreadUtil::createWithAllocator_BloombergLP::bdlf::Bind_BloombergLP::bslmf.Nil__void____BloombergLP::bslmt::Semaphore__BloombergLP::bdlmt::ThreadMultiplexor__int__bsl::function_void_____const___BloombergLP::bdlf::Bind_B () | int64_t method_int_BloombergLP::bslmt::ThreadUtil::createWithAllocator_BloombergLP::bdlf::Bind_BloombergLP::bslmf_Nil_void_BloombergLP::bslmt::Semaphore_BloombergLP::bdlmt::ThreadMultiplexor_int_bsl::function_void_const_BloombergLP::bdlf::Bind_B (int64_t arg4, int64_t arg3, uint32_t arg2, int64_t arg1) { | int64_t var_8h; | int64_t var_10h; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::bslmt::ThreadUtil::createWithAllocator const&), BloombergLP::bdlf::Bind_BoundTuple4 > > >(unsigned long*, BloombergLP::bslmt::ThreadAttributes const&, BloombergLP::bdlf::Bind const&), BloombergLP::bdlf::Bind_BoundTuple4 > > const&, BloombergLP::bslma::Allocator*) */ 0x00407d10 push rbp | 0x00407d11 push r15 | 0x00407d13 push r14 | 0x00407d15 push r13 | 0x00407d17 push r12 | 0x00407d19 push rbx | 0x00407d1a sub rsp, 0x18 | 0x00407d1e mov r14, rcx | r14 = rcx; 0x00407d21 mov rbp, rdx | 0x00407d24 mov r12, rsi | r12 = rsi; 0x00407d27 mov qword [rsp + 0x10], rdi | *((rsp + 0x10)) = rdi; 0x00407d2c cmp qword [rsi + 0x38], 0x17 | | if (*((rsi + 0x38)) != 0x17) { 0x00407d31 je 0x407d3a | 0x00407d33 mov rax, qword [r12 + 0x18] | rax = *((r12 + 0x18)); 0x00407d38 jmp 0x407d3f | | } else { 0x00407d3a lea rax, [r12 + 0x18] | rax = r12 + 0x18; | } 0x00407d3f mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x00407d44 mov r13, qword [r12 + 0x30] | r13 = *((r12 + 0x30)); 0x00407d49 test r14, r14 | | if (r14 == 0) { 0x00407d4c jne 0x407d62 | 0x00407d4e mov r14, qword [rip + 0x242d23] | r14 = BloombergLP::bslma::Default::s_defaultAllocator; 0x00407d55 test r14, r14 | | if (r14 != 0) { 0x00407d58 jne 0x407d62 | goto label_0; | } 0x00407d5a call 0x40a950 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00407d5f mov r14, rax | r14 = rax; | } | label_0: 0x00407d62 mov rax, qword [r14] | rax = *(r14); 0x00407d65 mov esi, 0xc0 | esi = 0xc0; 0x00407d6a mov rdi, r14 | rdi = r14; 0x00407d6d call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x00407d70 mov rbx, rax | rbx = rax; 0x00407d73 mov qword [rax], 0x407f00 | *(rax) = method.BloombergLP::bslmt::EntryPointFunctorAdapter_BloombergLP::bdlf::Bind_BloombergLP::bslmf.Nil__void____BloombergLP::bslmt::Semaphore__BloombergLP::bdlmt::ThreadMultiplexor__int__bsl::function_void_____const___BloombergLP::bdlf::Bind_BoundTuple4_; 0x00407d7a mov rax, qword [rbp] | rax = *(rbp); 0x00407d7e mov qword [rbx + 0x10], rax | *((rbx + 0x10)) = rax; 0x00407d82 mov rax, qword [rbp + 0x10] | rax = *((rbp + 0x10)); 0x00407d86 mov qword [rbx + 0x20], rax | *((rbx + 0x20)) = rax; 0x00407d8a mov rax, qword [rbp + 0x18] | rax = *((rbp + 0x18)); 0x00407d8e mov qword [rbx + 0x28], rax | *((rbx + 0x28)) = rax; 0x00407d92 mov eax, dword [rbp + 0x20] | eax = *((rbp + 0x20)); 0x00407d95 mov dword [rbx + 0x30], eax | *((rbx + 0x30)) = eax; 0x00407d98 lea r15, [rbx + 0x40] | r15 = rbx + 0x40; 0x00407d9c add rbp, 0x30 | rbp += 0x30; 0x00407da0 mov qword [rbx + 0x70], r14 | *((rbx + 0x70)) = r14; 0x00407da4 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x00407da7 movups xmmword [rbx + 0x78], xmm0 | __asm ("movups xmmword [rbx + 0x78], xmm0"); 0x00407dab mov rdi, r15 | 0x00407dae mov rsi, rbp | 0x00407db1 call 0x40c620 | BloombergLP::bslstl::Function_Rep::copyInit(BloombergLP::bslstl::Function_Repconst&) (r15, rbp); 0x00407db6 mov rdi, rbx | 0x00407db9 add rdi, 0x90 | rdi += 0x90; 0x00407dc0 mov qword [rbx + 0x90], 0 | *((rbx + 0x90)) = 0; 0x00407dcb mov qword [rbx + 0xb8], r14 | *((rbx + 0xb8)) = r14; 0x00407dd2 movaps xmm0, xmmword [rip + 0x29b87] | xmm0 = .comment; 0x00407dd9 movups xmmword [rbx + 0xa8], xmm0 | __asm ("movups xmmword [rbx + 0xa8], xmm0"); 0x00407de0 mov ecx, 0x43206c | 0x00407de5 mov rsi, qword [rsp + 8] | 0x00407dea mov rdx, r13 | 0x00407ded call 0x40e420 | bsl::basic_string,bsl::allocator>::privateAppend(char const*,unsigned long,char const*) (rbx, *((rsp + 8)), r13, "string<...>::assign(i,j): string too long"); 0x00407df2 mov edx, 0x40b870 | 0x00407df7 mov rdi, qword [rsp + 0x10] | 0x00407dfc mov rsi, r12 | 0x00407dff mov rcx, rbx | 0x00407e02 call 0x40bfb0 | eax = BloombergLP::bslmt::ThreadUtilImpl::create(unsigned long*,BloombergLP::bslmt::ThreadAttributesconst&,void*(*)(void*),void*) (*((rsp + 0x10)), r12, sym.bslmt_EntryPointFunctorAdapter_invoker, rbx); 0x00407e07 mov ebp, eax | 0x00407e09 test eax, eax | | if (eax != 0) { 0x00407e0b je 0x407e4a | 0x00407e0d cmp qword [rbx + 0xb0], 0x17 | | if (*((rbx + 0xb0)) != 0x17) { 0x00407e15 je 0x407e2b | 0x00407e17 mov rsi, qword [rbx + 0x90] | rsi = *((rbx + 0x90)); 0x00407e1e mov rdi, qword [rbx + 0xb8] | rdi = *((rbx + 0xb8)); 0x00407e25 mov rax, qword [rdi] | rax = *(rdi); 0x00407e28 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x00407e2b mov qword [rbx + 0xa8], 0xffffffffffffffff | *((rbx + 0xa8)) = 0xffffffffffffffff; 0x00407e36 mov rdi, r15 | 0x00407e39 call 0x40c590 | BloombergLP::bslstl::Function_Rep::~Function_Rep() (r15); 0x00407e3e mov rax, qword [r14] | rax = *(r14); 0x00407e41 mov rdi, r14 | rdi = r14; 0x00407e44 mov rsi, rbx | rsi = rbx; 0x00407e47 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x00407e4a mov eax, ebp | eax = ebp; 0x00407e4c add rsp, 0x18 | 0x00407e50 pop rbx | 0x00407e51 pop r12 | 0x00407e53 pop r13 | 0x00407e55 pop r14 | 0x00407e57 pop r15 | 0x00407e59 pop rbp | 0x00407e5a ret | return rax; | }