; assembly | /* r2dec pseudo code output */ | /* bdlcc_skiplist.t/none @ 0x5e9aa0 */ | #include | ; (fcn) method.BloombergLP::bdlcc::SkipList_int__bsl::basic_string_char__std::__1::char_traits_char___bsl::allocator_char_____.allocateNode_int__int_const__bsl::basic_string_char__std::__1::char_traits_char___bsl::allocator_char____const_ () | uint64_t method_BloombergLP::bdlcc::SkipList_int_bsl::basic_string_char_std::_1::char_traits_char_bsl::allocator_char_allocateNode_int_int_const_bsl::basic_string_char_std::_1::char_traits_char_bsl::allocator_char_const_ (char * arg4, int64_t arg3, uint32_t arg2, int64_t arg1) { | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlcc::SkipList, bsl::allocator > >::allocateNode(int, int const&, bsl::basic_string, bsl::allocator > const&) */ 0x005e9aa0 push r15 | 0x005e9aa2 push r14 | 0x005e9aa4 push r13 | 0x005e9aa6 push r12 | 0x005e9aa8 push rbx | 0x005e9aa9 mov r14, rcx | r14 = rcx; 0x005e9aac mov r12, rdx | r12 = rdx; 0x005e9aaf mov rbx, rdi | rbx = rdi; 0x005e9ab2 mov eax, dword [rdi + 8] | eax = *((rdi + 8)); 0x005e9ab5 lea ecx, [rax + 1] | ecx = rax + 1; 0x005e9ab8 cmp eax, esi | | if (eax < esi) { 0x005e9aba cmovl esi, ecx | esi = ecx; | } 0x005e9abd mov rdi, qword [rdi + 0x50] | 0x005e9ac1 call 0x64aa20 | rax = BloombergLP::bdlcc::SkipList_PoolUtil::allocate(BloombergLP::bdlcc::SkipList_PoolManager*,int) (*((rdi + 0x50)), rsi); 0x005e9ac6 mov r13, rax | r13 = rax; 0x005e9ac9 mov r15, qword [rbx + 0x50] | r15 = *((rbx + 0x50)); 0x005e9acd mov rdi, qword [rbx + 0x58] | rdi = *((rbx + 0x58)); 0x005e9ad1 test rdi, rdi | | if (rdi != 0) { 0x005e9ad4 je 0x5e9ae0 | 0x005e9ad6 mov eax, dword [r12] | eax = *(r12); 0x005e9ada mov dword [r13 + 0x38], eax | *((r13 + 0x38)) = eax; 0x005e9ade jmp 0x5e9b15 | | } else { 0x005e9ae0 mov rdi, qword [rip + 0x331059] | rdi = BloombergLP::bslma::Default::s_defaultAllocator; 0x005e9ae7 test rdi, rdi | | if (rdi == 0) { 0x005e9aea jne 0x5e9af4 | 0x005e9aec call 0x64efc0 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x005e9af1 mov rdi, rax | rdi = rax; | } 0x005e9af4 mov eax, dword [r12] | eax = *(r12); 0x005e9af8 mov dword [r13 + 0x38], eax | *((r13 + 0x38)) = eax; 0x005e9afc test rdi, rdi | | if (rdi != 0) { 0x005e9aff jne 0x5e9b15 | goto label_0; | } 0x005e9b01 mov rdi, qword [rip + 0x331038] | rdi = BloombergLP::bslma::Default::s_defaultAllocator; 0x005e9b08 test rdi, rdi | | if (rdi != 0) { 0x005e9b0b jne 0x5e9b15 | goto label_0; | } 0x005e9b0d call 0x64efc0 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x005e9b12 mov rdi, rax | rdi = rax; | } | label_0: 0x005e9b15 mov rax, qword [r14 + 0x20] | rax = *((r14 + 0x20)); 0x005e9b19 mov qword [r13 + 0x28], rax | *((r13 + 0x28)) = rax; 0x005e9b1d movups xmm0, xmmword [r14] | __asm ("movups xmm0, xmmword [r14]"); 0x005e9b21 movups xmm1, xmmword [r14 + 0x10] | __asm ("movups xmm1, xmmword [r14 + 0x10]"); 0x005e9b26 movups xmmword [r13 + 0x18], xmm1 | __asm ("movups xmmword [r13 + 0x18], xmm1"); 0x005e9b2b movups xmmword [r13 + 8], xmm0 | __asm ("movups xmmword [r13 + 8], xmm0"); 0x005e9b30 mov qword [r13 + 0x30], rdi | *((r13 + 0x30)) = rdi; 0x005e9b34 cmp rax, 0x17 | | if (rax != 0x17) { 0x005e9b38 je 0x5e9b9a | 0x005e9b3a mov rax, qword [r14 + 0x18] | rax = *((r14 + 0x18)); 0x005e9b3e cmp rax, 0x17 | 0x005e9b42 mov esi, 0x17 | esi = 0x17; | if (rax > 0x17) { 0x005e9b47 cmova rsi, rax | rsi = rax; | } 0x005e9b4b mov qword [r13 + 8], 0 | *((r13 + 8)) = 0; 0x005e9b53 mov qword [r13 + 0x20], rax | *((r13 + 0x20)) = rax; 0x005e9b57 mov qword [r13 + 0x28], rsi | *((r13 + 0x28)) = rsi; 0x005e9b5b cmp rax, 0x18 | | if (rax >= 0x18) { 0x005e9b5f jb 0x5e9b75 | 0x005e9b61 inc rsi | rsi++; 0x005e9b64 mov rax, qword [rdi] | rax = *(rdi); 0x005e9b67 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x005e9b6a mov qword [r13 + 8], rax | *((r13 + 8)) = rax; 0x005e9b6e cmp qword [r13 + 0x28], 0x17 | | if (*((r13 + 0x28)) != 0x17) { 0x005e9b73 jne 0x5e9b7c | goto label_1; | } | } 0x005e9b75 mov rax, r13 | rax = r13; 0x005e9b78 add rax, 8 | rax += 8; | label_1: 0x005e9b7c mov rdx, qword [r13 + 0x20] | rdx = *((r13 + 0x20)); 0x005e9b80 inc rdx | rdx++; | if (rdx == 0) { 0x005e9b83 je 0x5e9b9a | goto label_2; | } 0x005e9b85 cmp qword [r14 + 0x20], 0x17 | | if (*((r14 + 0x20)) != 0x17) { 0x005e9b8a je 0x5e9b8f | 0x005e9b8c mov r14, qword [r14] | r14 = *(r14); | } 0x005e9b8f mov rdi, rax | 0x005e9b92 mov rsi, r14 | 0x005e9b95 call 0x4053d0 | memcpy (rax, r14, rdx); | } | label_2: 0x005e9b9a mov rdi, r13 | 0x005e9b9d call 0x64a590 | BloombergLP::bdlcc::SkipList_Control::incrementRefCount() (r13); 0x005e9ba2 mov qword [r13 + 0x40], 0 | *((r13 + 0x40)) = 0; 0x005e9baa mov rax, r13 | rax = r13; 0x005e9bad pop rbx | 0x005e9bae pop r12 | 0x005e9bb0 pop r13 | 0x005e9bb2 pop r14 | 0x005e9bb4 pop r15 | 0x005e9bb6 ret | return rax; | }