; assembly | /* r2dec pseudo code output */ | /* bdlc_compactedarray.t/none @ 0x432480 */ | #include | ; (fcn) method.void_BloombergLP::bslalg::ArrayPrimitives_Imp::insert_BloombergLP::bdlc::CompactedArray_CountedValue_bsl::basic_string_char__std::__1::char_traits_char___bsl::allocator_char_______bsl::allocator_BloombergLP::bdlc::CompactedArray_CountedValue_bsl:: () | int64_t method_void_BloombergLP::bslalg::ArrayPrimitives_Imp::insert_BloombergLP::bdlc::CompactedArray_CountedValue_bsl::basic_string_char_std::_1::char_traits_char_bsl::allocator_char_bsl::allocator_BloombergLP::bdlc::CompactedArray_CountedValue_bsl:: (int64_t arg4, int64_t arg3, int64_t arg2, uint32_t arg1) { | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* void BloombergLP::bslalg::ArrayPrimitives_Imp::insert, bsl::allocator > >, bsl::allocator, bsl::allocator > > > >(BloombergLP::bdlc::CompactedArray_CountedValue, bsl::allocator > >*, BloombergLP::bdlc::CompactedArray_CountedValue, bsl::allocator > >*, BloombergLP::bslmf::MovableRef_Helper, bsl::allocator > > >::type, bsl::allocator, bsl::allocator > > >, BloombergLP::bslmf::MetaInt<0>*) */ 0x00432480 push rbp | 0x00432481 push r15 | 0x00432483 push r14 | 0x00432485 push r13 | 0x00432487 push r12 | 0x00432489 push rbx | 0x0043248a push rax | 0x0043248b mov r14, rdx | r14 = rdx; 0x0043248e mov r12, rdi | r12 = rdi; 0x00432491 cmp rdi, rsi | | if (rdi >= rsi) { 0x00432494 jae 0x4325ce | goto label_0; | } 0x0043249a mov r15, rsi | r15 = rsi; 0x0043249d lea r13, [rsi - 0x38] | r13 = rsi - 0x38; 0x004324a1 mov rdi, qword [rcx] | rdi = *(rcx); 0x004324a4 mov rax, qword [rsi - 8] | rax = *((rsi - 8)); 0x004324a8 mov qword [rsi + 0x30], rax | *((rsi + 0x30)) = rax; 0x004324ac test rdi, rdi | | if (rdi == 0) { 0x004324af jne 0x4324c5 | 0x004324b1 mov rdi, qword [rip + 0x257508] | rdi = BloombergLP::bslma::Default::s_defaultAllocator; 0x004324b8 test rdi, rdi | | if (rdi != 0) { 0x004324bb jne 0x4324c5 | goto label_1; | } 0x004324bd call 0x43d890 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x004324c2 mov rdi, rax | rdi = rax; | } | label_1: 0x004324c5 mov rax, qword [r13 + 0x20] | rax = *((r13 + 0x20)); 0x004324c9 mov qword [r15 + 0x20], rax | *((r15 + 0x20)) = rax; 0x004324cd movups xmm0, xmmword [r13] | __asm ("movups xmm0, xmmword [r13]"); 0x004324d2 movups xmm1, xmmword [r13 + 0x10] | __asm ("movups xmm1, xmmword [r13 + 0x10]"); 0x004324d7 movups xmmword [r15 + 0x10], xmm1 | __asm ("movups xmmword [r15 + 0x10], xmm1"); 0x004324dc movups xmmword [r15], xmm0 | __asm ("movups xmmword [r15], xmm0"); 0x004324e0 mov qword [r15 + 0x28], rdi | *((r15 + 0x28)) = rdi; 0x004324e4 cmp rax, 0x17 | | if (rax != 0x17) { 0x004324e8 je 0x432545 | 0x004324ea mov rax, qword [r15 - 0x20] | rax = *((r15 - 0x20)); 0x004324ee cmp rax, 0x17 | 0x004324f2 mov esi, 0x17 | esi = 0x17; | if (rax > 0x17) { 0x004324f7 cmova rsi, rax | rsi = rax; | } 0x004324fb mov qword [r15], 0 | *(r15) = 0; 0x00432502 mov qword [r15 + 0x18], rax | *((r15 + 0x18)) = rax; 0x00432506 mov qword [r15 + 0x20], rsi | *((r15 + 0x20)) = rsi; 0x0043250a cmp rax, 0x18 | | if (rax >= 0x18) { 0x0043250e jb 0x432523 | 0x00432510 inc rsi | rsi++; 0x00432513 mov rax, qword [rdi] | rax = *(rdi); 0x00432516 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x00432519 mov qword [r15], rax | *(r15) = rax; 0x0043251c cmp qword [r15 + 0x20], 0x17 | | if (*((r15 + 0x20)) != 0x17) { 0x00432521 jne 0x432526 | goto label_2; | } | } 0x00432523 mov rax, r15 | rax = r15; | label_2: 0x00432526 mov rdx, qword [r15 + 0x18] | rdx = *((r15 + 0x18)); 0x0043252a inc rdx | rdx++; | if (rdx == 0) { 0x0043252d je 0x432545 | goto label_3; | } 0x0043252f cmp qword [r15 - 0x18], 0x17 | 0x00432534 mov rsi, r13 | rsi = r13; | if (*((r15 - 0x18)) != 0x17) { 0x00432537 je 0x43253d | 0x00432539 mov rsi, qword [r15 - 0x38] | | } 0x0043253d mov rdi, rax | 0x00432540 call 0x403ea0 | memcpy (rax, *((r15 - 0x38)), rdx); | } | label_3: 0x00432545 cmp r13, r12 | | if (r13 == r12) { 0x00432548 je 0x43258f | goto label_4; | } 0x0043254a nop word [rax + rax] | | do { 0x00432550 lea rbx, [r13 - 0x38] | rbx = r13 - 0x38; 0x00432554 cmp qword [r13 - 0x18], 0x17 | 0x00432559 mov rsi, rbx | rsi = rbx; | if (*((r13 - 0x18)) != 0x17) { 0x0043255c je 0x432562 | 0x0043255e mov rsi, qword [r13 - 0x38] | | } 0x00432562 mov rdx, qword [r13 - 0x20] | 0x00432566 mov rbp, qword [r13 + 0x18] | rbp = *((r13 + 0x18)); 0x0043256a mov qword [r13 + 0x18], 0 | *((r13 + 0x18)) = 0; 0x00432572 mov ecx, 0x469a8b | 0x00432577 mov rdi, r13 | 0x0043257a call 0x441a80 | bsl::basic_string,bsl::allocator>::privateAppend(char const*,unsigned long,char const*) (r13, *((r13 - 0x38)), *((r13 - 0x20)), "string<...>::operator=(const string&...): string too long"); 0x0043257f mov rax, qword [r13 - 8] | rax = *((r13 - 8)); 0x00432583 mov qword [r13 + 0x30], rax | *((r13 + 0x30)) = rax; 0x00432587 mov r13, rbx | r13 = rbx; 0x0043258a cmp r12, rbx | 0x0043258d jne 0x432550 | | } while (r12 != rbx); | label_4: 0x0043258f cmp r12, r14 | | if (r12 != r14) { 0x00432592 je 0x4325c0 | 0x00432594 mov rdx, qword [r14 + 0x18] | rdx = *((r14 + 0x18)); 0x00432598 cmp qword [r14 + 0x20], 0x17 | 0x0043259d mov rsi, r14 | rsi = r14; | if (*((r14 + 0x20)) != 0x17) { 0x004325a0 je 0x4325a5 | 0x004325a2 mov rsi, qword [r14] | | } 0x004325a5 mov rbx, qword [r12 + 0x18] | rbx = *((r12 + 0x18)); 0x004325aa mov qword [r12 + 0x18], 0 | *((r12 + 0x18)) = 0; 0x004325b3 mov ecx, 0x469a8b | 0x004325b8 mov rdi, r12 | 0x004325bb call 0x441a80 | bsl::basic_string,bsl::allocator>::privateAppend(char const*,unsigned long,char const*) (r12, *(r14), rdx, "string<...>::operator=(const string&...): string too long"); | } 0x004325c0 mov rax, qword [r14 + 0x30] | rax = *((r14 + 0x30)); 0x004325c4 mov qword [r12 + 0x30], rax | *((r12 + 0x30)) = rax; 0x004325c9 jmp 0x432666 | goto label_5; | label_0: 0x004325ce mov rdi, qword [rcx] | rdi = *(rcx); 0x004325d1 mov rax, qword [r14 + 0x30] | rax = *((r14 + 0x30)); 0x004325d5 mov qword [r12 + 0x30], rax | *((r12 + 0x30)) = rax; 0x004325da test rdi, rdi | | if (rdi == 0) { 0x004325dd jne 0x4325f3 | 0x004325df mov rdi, qword [rip + 0x2573da] | rdi = BloombergLP::bslma::Default::s_defaultAllocator; 0x004325e6 test rdi, rdi | | if (rdi != 0) { 0x004325e9 jne 0x4325f3 | goto label_6; | } 0x004325eb call 0x43d890 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x004325f0 mov rdi, rax | rdi = rax; | } | label_6: 0x004325f3 mov rax, qword [r14 + 0x20] | rax = *((r14 + 0x20)); 0x004325f7 mov qword [r12 + 0x20], rax | *((r12 + 0x20)) = rax; 0x004325fc movups xmm0, xmmword [r14] | __asm ("movups xmm0, xmmword [r14]"); 0x00432600 movups xmm1, xmmword [r14 + 0x10] | __asm ("movups xmm1, xmmword [r14 + 0x10]"); 0x00432605 movups xmmword [r12 + 0x10], xmm1 | __asm ("movups xmmword [r12 + 0x10], xmm1"); 0x0043260b movups xmmword [r12], xmm0 | __asm ("movups xmmword [r12], xmm0"); 0x00432610 mov qword [r12 + 0x28], rdi | *((r12 + 0x28)) = rdi; 0x00432615 cmp rax, 0x17 | | if (rax != 0x17) { 0x00432619 je 0x432666 | 0x0043261b mov rax, qword [r14 + 0x18] | rax = *((r14 + 0x18)); 0x0043261f cmp rax, 0x17 | 0x00432623 mov esi, 0x17 | esi = 0x17; | if (rax > 0x17) { 0x00432628 cmova rsi, rax | rsi = rax; | } 0x0043262c mov qword [r12], 0 | *(r12) = 0; 0x00432634 mov qword [r12 + 0x18], rax | *((r12 + 0x18)) = rax; 0x00432639 mov qword [r12 + 0x20], rsi | *((r12 + 0x20)) = rsi; 0x0043263e cmp rax, 0x18 | | if (rax >= 0x18) { 0x00432642 jb 0x432659 | 0x00432644 inc rsi | rsi++; 0x00432647 mov rax, qword [rdi] | rax = *(rdi); 0x0043264a call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x0043264d mov qword [r12], rax | *(r12) = rax; 0x00432651 cmp qword [r12 + 0x20], 0x17 | | if (*((r12 + 0x20)) != 0x17) { 0x00432657 jne 0x43265c | goto label_7; | } | } 0x00432659 mov rax, r12 | rax = r12; | label_7: 0x0043265c mov rdx, qword [r12 + 0x18] | rdx = *((r12 + 0x18)); 0x00432661 inc rdx | rdx++; | if (rdx != 0) { 0x00432664 jne 0x432675 | goto label_8; | } | } | label_5: 0x00432666 add rsp, 8 | 0x0043266a pop rbx | 0x0043266b pop r12 | 0x0043266d pop r13 | 0x0043266f pop r14 | 0x00432671 pop r15 | 0x00432673 pop rbp | 0x00432674 ret | return rax; | label_8: 0x00432675 cmp qword [r14 + 0x20], 0x17 | | if (*((r14 + 0x20)) != 0x17) { 0x0043267a je 0x43267f | 0x0043267c mov r14, qword [r14] | r14 = *(r14); | } 0x0043267f mov rdi, rax | rdi = rax; 0x00432682 mov rsi, r14 | rsi = r14; 0x00432685 add rsp, 8 | 0x00432689 pop rbx | 0x0043268a pop r12 | 0x0043268c pop r13 | 0x0043268e pop r14 | 0x00432690 pop r15 | 0x00432692 pop rbp | 0x00432693 jmp 0x403ea0 | return memcpy (); | }