; assembly | /* r2dec pseudo code output */ | /* balb_testmessages.t/assume @ 0x41a670 */ | #include | ; (fcn) method.void_BloombergLP::bslalg::ArrayPrimitives_Imp::insert_BloombergLP::balb::Choice1__BloombergLP::balb::Choice1_const__bsl::allocator_BloombergLP::balb.Choice1____BloombergLP::balb::Choice1__BloombergLP::balb::Choice1__BloombergLP::balb::Choice1_c () | int64_t method_void_BloombergLP::bslalg::ArrayPrimitives_Imp::insert_BloombergLP::balb::Choice1_BloombergLP::balb::Choice1_const_bsl::allocator_BloombergLP::balb_Choice1_BloombergLP::balb::Choice1_BloombergLP::balb::Choice1_BloombergLP::balb::Choice1_c (int64_t arg6, uint32_t arg5, int64_t arg3, int64_t arg2, int64_t arg1) { | int64_t var_8h; | int64_t var_10h; | int64_t var_18h; | int64_t var_20h; | int64_t var_28h; | int64_t var_30h; | int64_t var_38h; | int64_t var_40h; | int64_t var_48h; | uint32_t var_50h; | r9 = arg6; | r8 = arg5; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* void BloombergLP::bslalg::ArrayPrimitives_Imp::insert >(BloombergLP::balb::Choice1*, BloombergLP::balb::Choice1*, BloombergLP::balb::Choice1 const*, BloombergLP::balb::Choice1 const*, unsigned long, bsl::allocator, BloombergLP::bslmf::MetaInt<1>*) */ 0x0041a670 push rbp | 0x0041a671 push r15 | 0x0041a673 push r14 | 0x0041a675 push r13 | 0x0041a677 push r12 | 0x0041a679 push rbx | 0x0041a67a sub rsp, 0x58 | 0x0041a67e test r8, r8 | | if (r8 == 0) { 0x0041a681 je 0x41a7ee | goto label_0; | } 0x0041a687 mov r15, r9 | r15 = r9; 0x0041a68a mov r12, r8 | r12 = r8; 0x0041a68d mov rbx, rdx | rbx = rdx; 0x0041a690 mov r13, rsi | r13 = rsi; 0x0041a693 mov rbp, rdi | 0x0041a696 mov rdx, rsi | rdx = rsi; 0x0041a699 sub rdx, rdi | rdx -= rdi; 0x0041a69c mov rax, rdx | rax = rdx; 0x0041a69f sar rax, 3 | rax >>= 3; 0x0041a6a3 movabs rcx, 0xaaaaaaaaaaaaaaab | rcx = 0xaaaaaaaaaaaaaaab; 0x0041a6ad imul rcx, rax | rcx *= rax; 0x0041a6b1 cmp rcx, r8 | 0x0041a6b4 mov rsi, r8 | rsi = r8; 0x0041a6b7 mov qword [rsp + 0x50], rcx | *((rsp + 0x50)) = rcx; | if (rcx < r8) { 0x0041a6bc cmovb rsi, rcx | rsi = rcx; | } 0x0041a6c0 lea rax, [r8 + r8*2] | rax = r8 * 3; 0x0041a6c4 mov qword [rsp + 0x20], rax | *((rsp + 0x20)) = rax; 0x0041a6c9 lea r14, [rdi + rax*8] | r14 = rdi + rax*8; 0x0041a6cd test rdx, rdx | 0x0041a6d0 mov qword [rsp + 0x28], r13 | *((rsp + 0x28)) = r13; | if (rdx != 0) { 0x0041a6d5 je 0x41a6ed | 0x0041a6d7 mov rdi, r14 | 0x0041a6da mov r13, rsi | r13 = rsi; 0x0041a6dd mov rsi, rbp | 0x0041a6e0 call 0x4037f0 | memmove (r14, rbp, rdx); 0x0041a6e5 mov rsi, r13 | rsi = r13; 0x0041a6e8 mov r13, qword [rsp + 0x28] | r13 = *((rsp + 0x28)); | } 0x0041a6ed mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x0041a6f2 lea rdi, [r13 + rax*8] | rdi = r13 + rax*8; 0x0041a6f7 test rsi, rsi | 0x0041a6fa mov qword [rsp + 0x18], rdi | *((rsp + 0x18)) = rdi; 0x0041a6ff mov qword [rsp + 0x10], r14 | *((rsp + 0x10)) = r14; | if (rsi == 0) { 0x0041a704 je 0x41a778 | goto label_1; | } 0x0041a706 mov qword [rsp + 0x48], r12 | *((rsp + 0x48)) = r12; 0x0041a70b mov rax, rsi | rax = rsi; 0x0041a70e neg rax | rax = -rax; 0x0041a711 lea rax, [rax + rax*2] | rax *= 3; 0x0041a715 lea rax, [rdi + rax*8] | rax = rdi + rax*8; 0x0041a719 mov qword [rsp + 0x38], rax | *((rsp + 0x38)) = rax; 0x0041a71e mov rdx, qword [r15] | 0x0041a721 mov qword [rsp + 0x40], rsi | *((rsp + 0x40)) = rsi; 0x0041a726 lea rax, [rsi + rsi*2] | rax = rsi * 3; 0x0041a72a lea r12, [rax*8 - 0x18] | r12 = rax*8 - 0x18; 0x0041a732 xor r14d, r14d | r14d = 0; 0x0041a735 mov qword [rsp + 0x30], rdx | *((rsp + 0x30)) = rdx; 0x0041a73a nop word [rax + rax] | | do { 0x0041a740 lea rsi, [rbx + r14] | 0x0041a744 lea r13, [rbp + r14] | r13 = rbp + r14; 0x0041a749 mov rdi, r13 | 0x0041a74c call 0x40bb60 | BloombergLP::balb::Choice1::Choice1(BloombergLP::balb::Choice1const&,BloombergLP::bslma::Allocator*) (r13, rbx + r14, *(r15)); 0x0041a751 cmp r12, r14 | | if (r12 == r14) { 0x0041a754 je 0x41a75f | goto label_2; | } 0x0041a756 mov rdx, qword [r15] | rdx = *(r15); 0x0041a759 add r14, 0x18 | r14 += 0x18; 0x0041a75d jmp 0x41a740 | | } while (1); | label_2: 0x0041a75f lea rbx, [rbx + r14 + 0x18] | rbx = rbx + r14 + 0x18; 0x0041a764 mov r13, qword [rsp + 0x28] | r13 = *((rsp + 0x28)); 0x0041a769 mov rdi, qword [rsp + 0x18] | rdi = *((rsp + 0x18)); 0x0041a76e mov r14, qword [rsp + 0x10] | r14 = *((rsp + 0x10)); 0x0041a773 mov r12, qword [rsp + 0x48] | r12 = *((rsp + 0x48)); | label_1: 0x0041a778 cmp qword [rsp + 0x50], r12 | | if (*((rsp + 0x50)) >= r12) { 0x0041a77d jae 0x41a7ee | goto label_0; | } 0x0041a77f mov r12, qword [r15] | r12 = *(r15); 0x0041a782 cmp r14, r13 | | if (r14 == r13) { 0x0041a785 je 0x41a7c7 | goto label_3; | } 0x0041a787 mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x0041a78c lea r14, [rbp + rax*8 - 0x18] | r14 = rbp + rax*8 - 0x18; 0x0041a791 mov rdx, r12 | 0x0041a794 mov rbp, r13 | 0x0041a797 nop word [rax + rax] | | do { 0x0041a7a0 mov rdi, rbp | 0x0041a7a3 mov rsi, rbx | 0x0041a7a6 call 0x40bb60 | BloombergLP::balb::Choice1::Choice1(BloombergLP::balb::Choice1const&,BloombergLP::bslma::Allocator*) (rbp, rbx, r12); 0x0041a7ab cmp r14, rbp | | if (r14 == rbp) { 0x0041a7ae je 0x41a7bd | goto label_4; | } 0x0041a7b0 add rbp, 0x18 | rbp += 0x18; 0x0041a7b4 add rbx, 0x18 | rbx += 0x18; 0x0041a7b8 mov rdx, qword [r15] | rdx = *(r15); 0x0041a7bb jmp 0x41a7a0 | | } while (1); | label_4: 0x0041a7bd mov r13, qword [rsp + 0x10] | r13 = *((rsp + 0x10)); 0x0041a7c2 mov rdi, qword [rsp + 0x18] | | label_3: 0x0041a7c7 mov qword [rsp + 8], r12 | *((rsp + 8)) = r12; 0x0041a7cc lea rdx, [rsp + 8] | rdx = rsp + 8; 0x0041a7d1 mov rsi, rdi | 0x0041a7d4 call 0x419cc0 | voidBloombergLP::bslalg::ArrayDestructionPrimitives::destroy>(BloombergLP::balb::Choice1*,BloombergLP::balb::Choice1*,bsl::allocator,bsl::integral_constant) (*((rsp + 0x18)), rdi); 0x0041a7d9 mov qword [rsp + 8], r12 | *((rsp + 8)) = r12; 0x0041a7de lea rdx, [rsp + 8] | rdx = rsp + 8; 0x0041a7e3 mov rdi, r13 | rdi = r13; 0x0041a7e6 mov rsi, r13 | 0x0041a7e9 call 0x419cc0 | voidBloombergLP::bslalg::ArrayDestructionPrimitives::destroy>(BloombergLP::balb::Choice1*,BloombergLP::balb::Choice1*,bsl::allocator,bsl::integral_constant) (rdi, r13); | label_0: 0x0041a7ee add rsp, 0x58 | 0x0041a7f2 pop rbx | 0x0041a7f3 pop r12 | 0x0041a7f5 pop r13 | 0x0041a7f7 pop r14 | 0x0041a7f9 pop r15 | 0x0041a7fb pop rbp | 0x0041a7fc ret | return rax; | }