; assembly | /* r2dec pseudo code output */ | /* baljsn_encoder.t/none @ 0x4cabb0 */ | #include | ; (fcn) method.void_bsl::vector_BloombergLP::s_baltst::Choice3__bsl::allocator_BloombergLP::s_baltst::Choice3___::privateInsert_BloombergLP::s_baltst.Choice3_const__BloombergLP::s_baltst::Choice3_const__BloombergLP::s_baltst::Choice3_const__BloombergLP::s_bal () | int64_t method_void_bsl::vector_BloombergLP::s_baltst::Choice3_bsl::allocator_BloombergLP::s_baltst::Choice3_::privateInsert_BloombergLP::s_baltst_Choice3_const_BloombergLP::s_baltst::Choice3_const_BloombergLP::s_baltst::Choice3_const_BloombergLP::s_bal (int64_t arg4, int64_t arg3, int64_t arg2, int64_t arg1) { | int64_t var_18h; | uint32_t var_20h; | int64_t var_8h_2; | int64_t var_60h; | int64_t var_68h; | int64_t var_70h; | int64_t var_30h; | int64_t var_38h; | int64_t var_40h; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* void bsl::vector >::privateInsert(BloombergLP::s_baltst::Choice3 const*, BloombergLP::s_baltst::Choice3 const*, BloombergLP::s_baltst::Choice3 const*, std::__1::forward_iterator_tag const&) */ 0x004cabb0 push rbp | 0x004cabb1 push r15 | 0x004cabb3 push r14 | 0x004cabb5 push r13 | 0x004cabb7 push r12 | 0x004cabb9 push rbx | 0x004cabba sub rsp, 0x48 | 0x004cabbe mov r12, rdx | r12 = rdx; 0x004cabc1 mov r8, rsi | r8 = rsi; 0x004cabc4 mov r14, rdi | r14 = rdi; 0x004cabc7 movabs rdx, 0xaaaaaaaaaaaaaa | rdx = 0xaaaaaaaaaaaaaa; 0x004cabd1 mov rdi, rcx | rdi = rcx; 0x004cabd4 sub rdi, r12 | rdi -= r12; 0x004cabd7 mov rbx, rdi | rbx = rdi; 0x004cabda sar rbx, 7 | rbx >>= 7; 0x004cabde movabs rax, 0xaaaaaaaaaaaaaaab | rax = 0xaaaaaaaaaaaaaaab; 0x004cabe8 imul rbx, rax | rbx *= rax; 0x004cabec mov rsi, qword [r14 + 8] | rsi = *((r14 + 8)); 0x004cabf0 mov r13, rsi | r13 = *((r14 + 8)); 0x004cabf3 sub r13, qword [r14] | r13 -= *(r14); 0x004cabf6 sar r13, 7 | r13 >>= 7; 0x004cabfa imul r13, rax | r13 *= rax; 0x004cabfe mov rax, rdx | rax = rdx; 0x004cac01 sub rax, r13 | rax -= r13; 0x004cac04 cmp rbx, rax | | if (rbx > rax) { 0x004cac07 ja 0x4cada6 | goto label_2; | } 0x004cac0d lea rbp, [r14 + 8] | rbp = r14 + 8; 0x004cac11 add r13, rbx | r13 += rbx; 0x004cac14 mov rax, qword [r14 + 0x10] | rax = *((r14 + 0x10)); 0x004cac18 cmp r13, rax | | if (r13 <= rax) { 0x004cac1b jbe 0x4cad46 | goto label_3; | } 0x004cac21 mov qword [rsp + 0x28], rbp | *((rsp + 0x28)) = rbp; 0x004cac26 mov qword [rsp + 0x30], r8 | *((rsp + 0x30)) = r8; 0x004cac2b mov qword [rsp + 0x38], rcx | *((rsp + 0x38)) = rcx; 0x004cac30 mov rdi, r13 | 0x004cac33 mov rsi, rax | 0x004cac36 call 0x523400 | rax = bsl::Vector_Util::computeNewCapacity(unsigned long,unsigned long,unsigned long) (r13, rax, rdx); 0x004cac3b mov r15, rax | r15 = rax; 0x004cac3e mov rdi, qword [r14 + 0x18] | rdi = *((r14 + 0x18)); 0x004cac42 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x004cac45 movaps xmmword [rsp], xmm0 | *(rsp) = xmm0; 0x004cac49 mov qword [rsp + 0x10], 0 | *((rsp + 0x10)) = 0; 0x004cac52 mov qword [rsp + 0x18], rdi | *((rsp + 0x18)) = rdi; 0x004cac57 shl rax, 7 | rax <<= 7; 0x004cac5b lea rsi, [rax + rax*2] | rsi = rax * 3; 0x004cac5f mov rax, qword [rdi] | rax = *(rdi); 0x004cac62 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x004cac65 mov rbp, rax | 0x004cac68 mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x004cac6d mov qword [rsp], rax | *(rsp) = rax; 0x004cac71 mov qword [rsp + 0x10], r15 | *((rsp + 0x10)) = r15; 0x004cac76 mov rdx, qword [r14] | 0x004cac79 mov r8, qword [r14 + 8] | 0x004cac7d mov rax, qword [r14 + 0x18] | rax = *((r14 + 0x18)); 0x004cac81 mov qword [rsp + 0x40], rax | *((rsp + 0x40)) = rax; 0x004cac86 sub rsp, 8 | 0x004cac8a lea rax, [rsp + 0x48] | rax = rsp + 0x48; 0x004cac8f mov rdi, rbp | 0x004cac92 mov rsi, qword [rsp + 0x30] | 0x004cac97 mov rcx, qword [rsp + 0x38] | 0x004cac9c mov r9, r12 | 0x004cac9f push rax | 0x004caca0 push rbx | 0x004caca1 push qword [rsp + 0x50] | 0x004caca5 call 0x4cae50 | voidBloombergLP::bslalg::ArrayPrimitives::destructiveMoveAndInsert,BloombergLP::s_baltst::Choice3const*>(bsl::allocator_traits>::pointer,bsl::allocator_traits>::pointer*,bsl::allocator_traits>::pointer,bsl::allocator_traits>::pointer,bsl::allocator_traits>::pointer,BloombergLP::s_baltst::Choice3const*,BloombergLP::s_baltst::Choice3const*,unsigned long,bsl::allocator) (rbp, *((rsp + 0x30)), *(r14), *((rsp + 0x38)), *((r14 + 8)), r12); 0x004cacaa add rsp, 0x20 | 0x004cacae lea rax, [r13 + r13*2] | rax = r13 * 3; 0x004cacb3 shl rax, 7 | rax <<= 7; 0x004cacb7 add rbp, rax | rbp += rax; 0x004cacba mov qword [rsp + 8], rbp | *((rsp + 8)) = rbp; 0x004cacbf mov rsi, rsp | 0x004cacc2 mov rdi, r14 | 0x004cacc5 call 0x523430 | bsl::Vector_Util::swap(void*,void*) (r14, rsp); 0x004cacca mov rbx, qword [rsp] | rbx = *(rsp); 0x004cacce test rbx, rbx | | if (rbx == 0) { 0x004cacd1 je 0x4cad97 | goto label_4; | } 0x004cacd7 mov rbp, qword [rsp + 8] | rbp = *((rsp + 8)); 0x004cacdc cmp rbx, rbp | | if (rbx != rbp) { 0x004cacdf jne 0x4cad0e | goto label_5; | } 0x004cace1 jmp 0x4cad89 | goto label_6; | label_1: 0x004cacf0 mov qword [rbx + 0x18], 0xffffffffffffffff | *((rbx + 0x18)) = 0xffffffffffffffff; | do { | label_0: 0x004cacf8 mov dword [rbx + 0x170], 0xffffffff | *((rbx + 0x170)) = 0xffffffff; 0x004cad02 add rbx, 0x180 | rbx += 0x180; 0x004cad09 cmp rbp, rbx | | if (rbp == rbx) { 0x004cad0c je 0x4cad85 | goto label_7; | } | label_5: 0x004cad0e mov eax, dword [rbx + 0x170] | eax = *((rbx + 0x170)); 0x004cad14 cmp eax, 2 | | if (eax == 2) { 0x004cad17 je 0x4cad30 | goto label_8; | } 0x004cad19 test eax, eax | 0x004cad1b jne 0x4cacf8 | | } while (eax != 0); 0x004cad1d mov rdi, rbx | 0x004cad20 call 0x4c4be0 | BloombergLP::s_baltst::Sequence6::~Sequence6() (rbx); 0x004cad25 jmp 0x4cacf8 | goto label_0; | label_8: 0x004cad30 cmp qword [rbx + 0x20], 0x17 | | if (*((rbx + 0x20)) == 0x17) { 0x004cad35 je 0x4cacf0 | goto label_1; | } 0x004cad37 mov rsi, qword [rbx] | rsi = *(rbx); 0x004cad3a mov rdi, qword [rbx + 0x28] | rdi = *((rbx + 0x28)); 0x004cad3e mov rax, qword [rdi] | rax = *(rdi); 0x004cad41 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x004cad44 jmp 0x4cacf0 | goto label_1; | label_3: 0x004cad46 test rdi, rdi | | if (rdi != 0) { 0x004cad49 je 0x4cad74 | 0x004cad4b mov rax, qword [r14 + 0x18] | rax = *((r14 + 0x18)); 0x004cad4f mov qword [rsp], rax | *(rsp) = rax; 0x004cad53 sub rsp, 8 | 0x004cad57 lea r9, [rsp + 8] | r9 = rsp + 8; 0x004cad5c mov rdi, r8 | 0x004cad5f mov rdx, r12 | 0x004cad62 mov r8, rbx | 0x004cad65 push 0 | 0x004cad67 call 0x4caf90 | voidBloombergLP::bslalg::ArrayPrimitives_Imp::insert>(BloombergLP::s_baltst::Choice3*,BloombergLP::s_baltst::Choice3*,BloombergLP::s_baltst::Choice3const*,BloombergLP::s_baltst::Choice3const*,unsigned long,bsl::allocator,BloombergLP::bslmf::MetaInt<1>*) (r8, rsi, r12, rcx, rbx); 0x004cad6c add rsp, 0x10 | 0x004cad70 mov rsi, qword [rbp] | rsi = *(rbp); | } 0x004cad74 lea rax, [rbx + rbx*2] | rax = rbx * 3; 0x004cad78 shl rax, 7 | rax <<= 7; 0x004cad7c add rax, rsi | rax += rsi; 0x004cad7f mov qword [rbp], rax | *(rbp) = rax; 0x004cad83 jmp 0x4cad97 | goto label_4; | label_7: 0x004cad85 mov rbx, qword [rsp] | rbx = *(rsp); | label_6: 0x004cad89 mov rdi, qword [rsp + 0x18] | rdi = *((rsp + 0x18)); 0x004cad8e mov rax, qword [rdi] | rax = *(rdi); 0x004cad91 mov rsi, rbx | rsi = rbx; 0x004cad94 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | label_4: 0x004cad97 add rsp, 0x48 | 0x004cad9b pop rbx | 0x004cad9c pop r12 | 0x004cad9e pop r13 | 0x004cada0 pop r14 | 0x004cada2 pop r15 | 0x004cada4 pop rbp | 0x004cada5 ret | return rax; | label_2: 0x004cada6 mov edi, 0x54f45d | 0x004cadab call 0x519650 | return BloombergLP::bslstl::StdExceptUtil::throwLengthError(char const*) ("vector<...>::insert(pos,first,last): vector too long"); | }