; assembly | /* r2dec pseudo code output */ | /* bdlc_compactedarray.t/assume @ 0x430540 */ | #include | ; (fcn) method.BloombergLP::bdlc::CompactedArray_bsl::basic_string_char__std::__1::char_traits_char___bsl::allocator_char_____.append_BloombergLP::bdlc::CompactedArray_bsl::basic_string_char__std::__1::char_traits_char___bsl::allocator_char______const__unsigned () | int64_t method_BloombergLP::bdlc::CompactedArray_bsl::basic_string_char_std::_1::char_traits_char_bsl::allocator_char_append_BloombergLP::bdlc::CompactedArray_bsl::basic_string_char_std::_1::char_traits_char_bsl::allocator_char_const_unsigned (int64_t arg4, int64_t arg3, int64_t arg2, uint32_t arg1) { | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlc::CompactedArray, bsl::allocator > >::append(BloombergLP::bdlc::CompactedArray, bsl::allocator > > const&, unsigned long, unsigned long) */ 0x00430540 push rbp | 0x00430541 push r15 | 0x00430543 push r14 | 0x00430545 push r13 | 0x00430547 push r12 | 0x00430549 push rbx | 0x0043054a push rax | 0x0043054b mov r15, rcx | r15 = rcx; 0x0043054e mov r14, rdx | r14 = rdx; 0x00430551 mov r12, rsi | r12 = rsi; 0x00430554 cmp rsi, rdi | | if (rsi == rdi) { 0x00430557 je 0x430612 | goto label_0; | } 0x0043055d mov rcx, rdi | rcx = rdi; 0x00430560 mov rbp, qword [rdi + 0x28] | rbp = *((rdi + 0x28)); 0x00430564 add rbp, r15 | rbp += r15; 0x00430567 mov rax, qword [rdi + 8] | rax = *((rdi + 8)); 0x0043056b sub rax, qword [rdi] | rax -= *(rdi); 0x0043056e sar rax, 3 | rax >>= 3; 0x00430572 movabs rdi, 0x6db6db6db6db6db7 | rdi = 0x6db6db6db6db6db7; 0x0043057c imul rdi, rax | rdi *= rax; 0x00430580 add rdi, r15 | rdi += r15; 0x00430583 mov qword [rsp], rcx | *(rsp) = rcx; 0x00430587 mov ebx, dword [rcx + 0x30] | ebx = *((rcx + 0x30)); 0x0043058a call 0x434590 | eax = BloombergLP::bdlc::PackedIntArrayImp_Unsigned::requiredBytesPerElement(unsigned long) (rdi); 0x0043058f mov rcx, qword [rsp] | rcx = *(rsp); 0x00430593 lea r13, [rcx + 0x20] | r13 = rcx + 0x20; 0x00430597 cmp eax, ebx | | if (eax > ebx) { 0x00430599 cmovg ebx, eax | ebx = eax; | } 0x0043059c movsxd rax, ebx | rax = (int64_t) ebx; 0x0043059f imul rbp, rax | rbp *= rax; 0x004305a3 cmp rbp, qword [rcx + 0x38] | | if (rbp > *((rcx + 0x38))) { 0x004305a7 jbe 0x4305b4 | 0x004305a9 mov rdi, r13 | 0x004305ac mov rsi, rbp | 0x004305af call 0x439a40 | rax = BloombergLP::bdlc::PackedIntArrayImp::reserveCapacityImp(unsigned long) (r13, rbp); | } 0x004305b4 test r15, r15 | 0x004305b7 mov rbx, qword [rsp] | rbx = *(rsp); | if (r15 == 0) { 0x004305bb je 0x430603 | goto label_1; | } 0x004305bd lea rbp, [r12 + 0x20] | rbp = r12 + 0x20; 0x004305c2 nop word cs:[rax + rax] | 0x004305cc nop dword [rax] | | do { 0x004305d0 mov rdi, rbp | 0x004305d3 mov rsi, r14 | rsi = r14; 0x004305d6 call 0x43aae0 | rax = BloombergLP::bdlc::PackedIntArrayImp::operator [] (unsigned long)const (rbp); 0x004305db imul rsi, rax, 0x38 | rsi = rax * 0x38; 0x004305df add rsi, qword [r12] | rsi += *(r12); 0x004305e3 mov edx, 1 | 0x004305e8 mov rdi, rbx | 0x004305eb call 0x4317b0 | rax = BloombergLP::bdlc::CompactedArray,bsl::allocator>>::increment(bsl::basic_string,bsl::allocator>const&,unsigned long) (rbx, rsi, 1); 0x004305f0 mov rdi, r13 | 0x004305f3 mov rsi, rax | 0x004305f6 call 0x439860 | BloombergLP::bdlc::PackedIntArrayImp::append(unsigned long) (r13, rax, rdx, rcx, r8, r9); 0x004305fb inc r14 | r14++; 0x004305fe dec r15 | r15--; 0x00430601 jne 0x4305d0 | | } while (r15 != 0); | label_1: 0x00430603 add rsp, 8 | 0x00430607 pop rbx | 0x00430608 pop r12 | 0x0043060a pop r13 | 0x0043060c pop r14 | 0x0043060e pop r15 | 0x00430610 pop rbp | 0x00430611 ret | return rax; | label_0: 0x00430612 lea r13, [r12 + 0x20] | r13 = r12 + 0x20; 0x00430617 mov rsi, qword [r12 + 0x28] | 0x0043061c add rsi, r15 | rsi += r15; 0x0043061f shl rsi, 3 | rsi <<= 3; 0x00430623 mov rdi, r13 | 0x00430626 call 0x439a40 | BloombergLP::bdlc::PackedIntArrayImp::reserveCapacityImp(unsigned long) (r13, *((r12 + 0x28))); 0x0043062b test r15, r15 | | if (r15 == 0) { 0x0043062e je 0x430660 | goto label_2; | } 0x00430630 mov rbx, r14 | rbx = r14; 0x00430633 mov rbp, r15 | 0x00430636 nop word cs:[rax + rax] | | do { 0x00430640 mov rdi, r13 | 0x00430643 mov rsi, rbx | rsi = rbx; 0x00430646 call 0x43aae0 | rax = BloombergLP::bdlc::PackedIntArrayImp::operator [] (unsigned long)const (r13); 0x0043064b mov rcx, qword [r12] | rcx = *(r12); 0x0043064f imul rax, rax, 0x38 | rax *= 0x38; 0x00430653 inc qword [rcx + rax + 0x30] | *((rcx + rax + 0x30))++; 0x00430658 inc rbx | rbx++; 0x0043065b dec rbp | rbp--; 0x0043065e jne 0x430640 | | } while (rbp != 0); | label_2: 0x00430660 mov rdi, r13 | rdi = r13; 0x00430663 mov rsi, r13 | rsi = r13; 0x00430666 mov rdx, r14 | rdx = r14; 0x00430669 mov rcx, r15 | rcx = r15; 0x0043066c add rsp, 8 | 0x00430670 pop rbx | 0x00430671 pop r12 | 0x00430673 pop r13 | 0x00430675 pop r14 | 0x00430677 pop r15 | 0x00430679 pop rbp | 0x0043067a jmp 0x439ae0 | return void (*0x439ae0)() (); | }