; assembly | /* r2dec pseudo code output */ | /* balb_testmessages.t/assume @ 0x41b920 */ | #include | ; (fcn) method.void_bsl::vector_BloombergLP::balb::Choice3__bsl::allocator_BloombergLP::balb::Choice3___::privateInsert_BloombergLP::balb.Choice3_const__BloombergLP::balb::Choice3_const__BloombergLP::balb::Choice3_const__BloombergLP::balb::Choice3_const__std () | int64_t method_void_bsl::vector_BloombergLP::balb::Choice3_bsl::allocator_BloombergLP::balb::Choice3_::privateInsert_BloombergLP::balb_Choice3_const_BloombergLP::balb::Choice3_const_BloombergLP::balb::Choice3_const_BloombergLP::balb::Choice3_const_std (int64_t arg4, int64_t arg3, int64_t arg2, int64_t arg1) { | int64_t var_10h; | int64_t var_18h_2; | int64_t var_28h_2; | int64_t var_38h; | int64_t var_40h; | int64_t var_48h; | int64_t var_50h; | int64_t var_58h; | int64_t var_60h; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* void bsl::vector >::privateInsert(BloombergLP::balb::Choice3 const*, BloombergLP::balb::Choice3 const*, BloombergLP::balb::Choice3 const*, std::__1::forward_iterator_tag const&) */ 0x0041b920 push rbp | 0x0041b921 push r15 | 0x0041b923 push r14 | 0x0041b925 push r13 | 0x0041b927 push r12 | 0x0041b929 push rbx | 0x0041b92a sub rsp, 0x68 | 0x0041b92e mov rbp, rdx | 0x0041b931 mov r8, rsi | r8 = rsi; 0x0041b934 mov r15, rdi | r15 = rdi; 0x0041b937 movabs rdx, 0xaaaaaaaaaaaaaa | rdx = 0xaaaaaaaaaaaaaa; 0x0041b941 mov rdi, rcx | rdi = rcx; 0x0041b944 sub rdi, rbp | rdi -= rbp; 0x0041b947 mov r12, rdi | r12 = rdi; 0x0041b94a sar r12, 7 | r12 >>= 7; 0x0041b94e movabs rax, 0xaaaaaaaaaaaaaaab | rax = 0xaaaaaaaaaaaaaaab; 0x0041b958 imul r12, rax | r12 *= rax; 0x0041b95c mov rsi, qword [r15 + 8] | rsi = *((r15 + 8)); 0x0041b960 mov rbx, rsi | rbx = *((r15 + 8)); 0x0041b963 sub rbx, qword [r15] | rbx -= *(r15); 0x0041b966 sar rbx, 7 | rbx >>= 7; 0x0041b96a imul rbx, rax | rbx *= rax; 0x0041b96e mov rax, rdx | rax = rdx; 0x0041b971 sub rax, rbx | rax -= rbx; 0x0041b974 cmp r12, rax | | if (r12 > rax) { 0x0041b977 ja 0x41bb5f | goto label_1; | } 0x0041b97d add rbx, r12 | rbx += r12; 0x0041b980 mov rax, qword [r15 + 0x10] | rax = *((r15 + 0x10)); 0x0041b984 cmp rbx, rax | | if (rbx <= rax) { 0x0041b987 jbe 0x41baff | goto label_2; | } 0x0041b98d mov qword [rsp + 0x50], rbp | *((rsp + 0x50)) = rbp; 0x0041b992 mov qword [rsp + 0x58], rcx | *((rsp + 0x58)) = rcx; 0x0041b997 mov rdi, rbx | 0x0041b99a mov rsi, rax | 0x0041b99d mov qword [rsp + 0x40], r8 | *((rsp + 0x40)) = r8; 0x0041b9a2 call 0x42abc0 | rax = bsl::Vector_Util::computeNewCapacity(unsigned long,unsigned long,unsigned long) (rbx, rax, rdx); 0x0041b9a7 mov rbp, rax | 0x0041b9aa mov rdi, qword [r15 + 0x18] | rdi = *((r15 + 0x18)); 0x0041b9ae xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0041b9b1 movaps xmmword [rsp + 0x10], xmm0 | *((rsp + 0x10)) = xmm0; 0x0041b9b6 mov qword [rsp + 0x20], 0 | *((rsp + 0x20)) = 0; 0x0041b9bf mov qword [rsp + 0x28], rdi | *((rsp + 0x28)) = rdi; 0x0041b9c4 shl rax, 7 | rax <<= 7; 0x0041b9c8 lea rsi, [rax + rax*2] | rsi = rax * 3; 0x0041b9cc mov rax, qword [rdi] | rax = *(rdi); 0x0041b9cf call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x0041b9d2 mov qword [rsp + 0x18], rax | *((rsp + 0x18)) = rax; 0x0041b9d7 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0041b9dc mov qword [rsp + 0x20], rbp | *((rsp + 0x20)) = rbp; 0x0041b9e1 mov rdx, qword [r15] | rdx = *(r15); 0x0041b9e4 mov r14, qword [r15 + 8] | r14 = *((r15 + 8)); 0x0041b9e8 mov rcx, qword [r15 + 0x18] | rcx = *((r15 + 0x18)); 0x0041b9ec mov rbp, qword [rsp + 0x40] | rbp = *((rsp + 0x40)); 0x0041b9f1 mov qword [rsp + 0x48], rdx | *((rsp + 0x48)) = rdx; 0x0041b9f6 sub rbp, rdx | rbp -= rdx; 0x0041b9f9 mov r13, rax | r13 = rax; 0x0041b9fc add r13, rbp | r13 += rbp; 0x0041b9ff mov qword [rsp + 0x60], rcx | *((rsp + 0x60)) = rcx; 0x0041ba04 lea rcx, [rsp + 0x60] | 0x0041ba09 mov qword [rsp + 0x38], rax | *((rsp + 0x38)) = rax; 0x0041ba0e mov rdi, r13 | 0x0041ba11 mov rsi, qword [rsp + 0x50] | 0x0041ba16 mov rdx, qword [rsp + 0x58] | 0x0041ba1b xor r8d, r8d | r8d = 0; 0x0041ba1e call 0x41b340 | voidBloombergLP::bslalg::ArrayPrimitives_Imp::copyConstruct>(BloombergLP::balb::Choice3*,BloombergLP::balb::Choice3const*,BloombergLP::balb::Choice3const*,bsl::allocator,BloombergLP::bslmf::MetaInt<0>*) (r13, *((rsp + 0x50)), *((rsp + 0x58)), rsp + 0x60); 0x0041ba23 mov rdi, qword [rsp + 0x38] | rdi = *((rsp + 0x38)); 0x0041ba28 mov rsi, qword [rsp + 0x40] | rsi = *((rsp + 0x40)); 0x0041ba2d sub r14, rsi | r14 -= rsi; | if (r14 != 0) { 0x0041ba30 je 0x41ba53 | 0x0041ba32 lea rax, [r12 + r12*2] | rax = r12 * 3; 0x0041ba36 shl rax, 7 | rax <<= 7; 0x0041ba3a add r13, rax | r13 += rax; 0x0041ba3d mov rdi, r13 | 0x0041ba40 mov rdx, r14 | 0x0041ba43 mov r14, rsi | r14 = rsi; 0x0041ba46 call 0x403a30 | memcpy (r13, rsi, r14); 0x0041ba4b mov rdi, qword [rsp + 0x38] | rdi = *((rsp + 0x38)); 0x0041ba50 mov rsi, r14 | rsi = r14; | } 0x0041ba53 mov qword [r15 + 8], rsi | *((r15 + 8)) = rsi; 0x0041ba57 test rbp, rbp | 0x0041ba5a mov r14, qword [rsp + 0x48] | r14 = *((rsp + 0x48)); | if (rbp != 0) { 0x0041ba5f je 0x41ba6c | 0x0041ba61 mov rsi, r14 | 0x0041ba64 mov rdx, rbp | 0x0041ba67 call 0x403a30 | memcpy (rdi, r14, rbp); | } 0x0041ba6c mov qword [r15 + 8], r14 | *((r15 + 8)) = r14; 0x0041ba70 lea rax, [rbx + rbx*2] | rax = rbx * 3; 0x0041ba74 shl rax, 7 | rax <<= 7; 0x0041ba78 add qword [rsp + 0x18], rax | *((rsp + 0x18)) += rax; 0x0041ba7d lea rsi, [rsp + 0x10] | 0x0041ba82 mov rdi, r15 | 0x0041ba85 call 0x42abf0 | bsl::Vector_Util::swap(void*,void*) (r15, rsp + 0x10); 0x0041ba8a mov rbx, qword [rsp + 0x10] | rbx = *((rsp + 0x10)); 0x0041ba8f test rbx, rbx | | if (rbx == 0) { 0x0041ba92 je 0x41bb50 | goto label_3; | } 0x0041ba98 mov rbp, qword [rsp + 0x18] | rbp = *((rsp + 0x18)); 0x0041ba9d cmp rbx, rbp | | if (rbx != rbp) { 0x0041baa0 jne 0x41bace | goto label_4; | } 0x0041baa2 jmp 0x41bb42 | goto label_5; 0x0041bab0 mov rdi, rbx | 0x0041bab3 call 0x409400 | BloombergLP::balb::Sequence6::~Sequence6() (rbx); | do { | label_0: 0x0041bab8 mov dword [rbx + 0x170], 0xffffffff | *((rbx + 0x170)) = 0xffffffff; 0x0041bac2 add rbx, 0x180 | rbx += 0x180; 0x0041bac9 cmp rbp, rbx | | if (rbp == rbx) { 0x0041bacc je 0x41bb3d | goto label_6; | } | label_4: 0x0041bace mov eax, dword [rbx + 0x170] | eax = *((rbx + 0x170)); 0x0041bad4 cmp rax, 3 | 0x0041bad8 ja 0x41bab8 | | } while (rax > 3); | /* switch table (4 cases) at 0x4482d8 */ 0x0041bada jmp qword [rax*8 + 0x4482d8] | 0x0041bae1 cmp qword [rbx + 0x20], 0x17 | | if (*((rbx + 0x20)) != 0x17) { 0x0041bae6 je 0x41baf5 | 0x0041bae8 mov rsi, qword [rbx] | rsi = *(rbx); 0x0041baeb mov rdi, qword [rbx + 0x28] | rdi = *((rbx + 0x28)); 0x0041baef mov rax, qword [rdi] | rax = *(rdi); 0x0041baf2 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x0041baf5 mov qword [rbx + 0x18], 0xffffffffffffffff | *((rbx + 0x18)) = 0xffffffffffffffff; 0x0041bafd jmp 0x41bab8 | goto label_0; | label_2: 0x0041baff test rdi, rdi | | if (rdi != 0) { 0x0041bb02 je 0x41bb2c | 0x0041bb04 mov rax, qword [r15 + 0x18] | rax = *((r15 + 0x18)); 0x0041bb08 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0041bb0d mov qword [rsp], 0 | *(rsp) = 0; 0x0041bb15 lea r9, [rsp + 0x10] | r9 = rsp + 0x10; 0x0041bb1a mov rdi, r8 | 0x0041bb1d mov rdx, rbp | 0x0041bb20 mov r8, r12 | 0x0041bb23 call 0x41bc10 | voidBloombergLP::bslalg::ArrayPrimitives_Imp::insert>(BloombergLP::balb::Choice3*,BloombergLP::balb::Choice3*,BloombergLP::balb::Choice3const*,BloombergLP::balb::Choice3const*,unsigned long,bsl::allocator,BloombergLP::bslmf::MetaInt<1>*) (r8, rsi, rbp, rcx, r12); 0x0041bb28 mov rsi, qword [r15 + 8] | rsi = *((r15 + 8)); | } 0x0041bb2c lea rax, [r12 + r12*2] | rax = r12 * 3; 0x0041bb30 shl rax, 7 | rax <<= 7; 0x0041bb34 add rax, rsi | rax += rsi; 0x0041bb37 mov qword [r15 + 8], rax | *((r15 + 8)) = rax; 0x0041bb3b jmp 0x41bb50 | goto label_3; | label_6: 0x0041bb3d mov rbx, qword [rsp + 0x10] | rbx = *((rsp + 0x10)); | label_5: 0x0041bb42 mov rdi, qword [rsp + 0x28] | rdi = *((rsp + 0x28)); 0x0041bb47 mov rax, qword [rdi] | rax = *(rdi); 0x0041bb4a mov rsi, rbx | rsi = rbx; 0x0041bb4d call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | label_3: 0x0041bb50 add rsp, 0x68 | 0x0041bb54 pop rbx | 0x0041bb55 pop r12 | 0x0041bb57 pop r13 | 0x0041bb59 pop r14 | 0x0041bb5b pop r15 | 0x0041bb5d pop rbp | 0x0041bb5e ret | return rax; | label_1: 0x0041bb5f mov edi, 0x44862d | 0x0041bb64 call 0x420e10 | return BloombergLP::bslstl::StdExceptUtil::throwLengthError(char const*) ("vector<...>::insert(pos,first,last): vector too long"); | }