; assembly | /* r2dec pseudo code output */ | /* balb_testmessages.t/none @ 0x41a680 */ | #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>*) */ 0x0041a680 push rbp | 0x0041a681 push r15 | 0x0041a683 push r14 | 0x0041a685 push r13 | 0x0041a687 push r12 | 0x0041a689 push rbx | 0x0041a68a sub rsp, 0x58 | 0x0041a68e test r8, r8 | | if (r8 == 0) { 0x0041a691 je 0x41a7fe | goto label_0; | } 0x0041a697 mov r15, r9 | r15 = r9; 0x0041a69a mov r12, r8 | r12 = r8; 0x0041a69d mov rbx, rdx | rbx = rdx; 0x0041a6a0 mov r13, rsi | r13 = rsi; 0x0041a6a3 mov rbp, rdi | 0x0041a6a6 mov rdx, rsi | rdx = rsi; 0x0041a6a9 sub rdx, rdi | rdx -= rdi; 0x0041a6ac mov rax, rdx | rax = rdx; 0x0041a6af sar rax, 3 | rax >>= 3; 0x0041a6b3 movabs rcx, 0xaaaaaaaaaaaaaaab | rcx = 0xaaaaaaaaaaaaaaab; 0x0041a6bd imul rcx, rax | rcx *= rax; 0x0041a6c1 cmp rcx, r8 | 0x0041a6c4 mov rsi, r8 | rsi = r8; 0x0041a6c7 mov qword [rsp + 0x50], rcx | *((rsp + 0x50)) = rcx; | if (rcx < r8) { 0x0041a6cc cmovb rsi, rcx | rsi = rcx; | } 0x0041a6d0 lea rax, [r8 + r8*2] | rax = r8 * 3; 0x0041a6d4 mov qword [rsp + 0x20], rax | *((rsp + 0x20)) = rax; 0x0041a6d9 lea r14, [rdi + rax*8] | r14 = rdi + rax*8; 0x0041a6dd test rdx, rdx | 0x0041a6e0 mov qword [rsp + 0x28], r13 | *((rsp + 0x28)) = r13; | if (rdx != 0) { 0x0041a6e5 je 0x41a6fd | 0x0041a6e7 mov rdi, r14 | 0x0041a6ea mov r13, rsi | r13 = rsi; 0x0041a6ed mov rsi, rbp | 0x0041a6f0 call 0x4037f0 | memmove (r14, rbp, rdx); 0x0041a6f5 mov rsi, r13 | rsi = r13; 0x0041a6f8 mov r13, qword [rsp + 0x28] | r13 = *((rsp + 0x28)); | } 0x0041a6fd mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x0041a702 lea rdi, [r13 + rax*8] | rdi = r13 + rax*8; 0x0041a707 test rsi, rsi | 0x0041a70a mov qword [rsp + 0x18], rdi | *((rsp + 0x18)) = rdi; 0x0041a70f mov qword [rsp + 0x10], r14 | *((rsp + 0x10)) = r14; | if (rsi == 0) { 0x0041a714 je 0x41a788 | goto label_1; | } 0x0041a716 mov qword [rsp + 0x48], r12 | *((rsp + 0x48)) = r12; 0x0041a71b mov rax, rsi | rax = rsi; 0x0041a71e neg rax | rax = -rax; 0x0041a721 lea rax, [rax + rax*2] | rax *= 3; 0x0041a725 lea rax, [rdi + rax*8] | rax = rdi + rax*8; 0x0041a729 mov qword [rsp + 0x38], rax | *((rsp + 0x38)) = rax; 0x0041a72e mov rdx, qword [r15] | 0x0041a731 mov qword [rsp + 0x40], rsi | *((rsp + 0x40)) = rsi; 0x0041a736 lea rax, [rsi + rsi*2] | rax = rsi * 3; 0x0041a73a lea r12, [rax*8 - 0x18] | r12 = rax*8 - 0x18; 0x0041a742 xor r14d, r14d | r14d = 0; 0x0041a745 mov qword [rsp + 0x30], rdx | *((rsp + 0x30)) = rdx; 0x0041a74a nop word [rax + rax] | | do { 0x0041a750 lea rsi, [rbx + r14] | 0x0041a754 lea r13, [rbp + r14] | r13 = rbp + r14; 0x0041a759 mov rdi, r13 | 0x0041a75c call 0x40baf0 | BloombergLP::balb::Choice1::Choice1(BloombergLP::balb::Choice1const&,BloombergLP::bslma::Allocator*) (r13, rbx + r14, *(r15)); 0x0041a761 cmp r12, r14 | | if (r12 == r14) { 0x0041a764 je 0x41a76f | goto label_2; | } 0x0041a766 mov rdx, qword [r15] | rdx = *(r15); 0x0041a769 add r14, 0x18 | r14 += 0x18; 0x0041a76d jmp 0x41a750 | | } while (1); | label_2: 0x0041a76f lea rbx, [rbx + r14 + 0x18] | rbx = rbx + r14 + 0x18; 0x0041a774 mov r13, qword [rsp + 0x28] | r13 = *((rsp + 0x28)); 0x0041a779 mov rdi, qword [rsp + 0x18] | rdi = *((rsp + 0x18)); 0x0041a77e mov r14, qword [rsp + 0x10] | r14 = *((rsp + 0x10)); 0x0041a783 mov r12, qword [rsp + 0x48] | r12 = *((rsp + 0x48)); | label_1: 0x0041a788 cmp qword [rsp + 0x50], r12 | | if (*((rsp + 0x50)) >= r12) { 0x0041a78d jae 0x41a7fe | goto label_0; | } 0x0041a78f mov r12, qword [r15] | r12 = *(r15); 0x0041a792 cmp r14, r13 | | if (r14 == r13) { 0x0041a795 je 0x41a7d7 | goto label_3; | } 0x0041a797 mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x0041a79c lea r14, [rbp + rax*8 - 0x18] | r14 = rbp + rax*8 - 0x18; 0x0041a7a1 mov rdx, r12 | 0x0041a7a4 mov rbp, r13 | 0x0041a7a7 nop word [rax + rax] | | do { 0x0041a7b0 mov rdi, rbp | 0x0041a7b3 mov rsi, rbx | 0x0041a7b6 call 0x40baf0 | BloombergLP::balb::Choice1::Choice1(BloombergLP::balb::Choice1const&,BloombergLP::bslma::Allocator*) (rbp, rbx, r12); 0x0041a7bb cmp r14, rbp | | if (r14 == rbp) { 0x0041a7be je 0x41a7cd | goto label_4; | } 0x0041a7c0 add rbp, 0x18 | rbp += 0x18; 0x0041a7c4 add rbx, 0x18 | rbx += 0x18; 0x0041a7c8 mov rdx, qword [r15] | rdx = *(r15); 0x0041a7cb jmp 0x41a7b0 | | } while (1); | label_4: 0x0041a7cd mov r13, qword [rsp + 0x10] | r13 = *((rsp + 0x10)); 0x0041a7d2 mov rdi, qword [rsp + 0x18] | | label_3: 0x0041a7d7 mov qword [rsp + 8], r12 | *((rsp + 8)) = r12; 0x0041a7dc lea rdx, [rsp + 8] | rdx = rsp + 8; 0x0041a7e1 mov rsi, rdi | 0x0041a7e4 call 0x419d40 | voidBloombergLP::bslalg::ArrayDestructionPrimitives::destroy>(BloombergLP::balb::Choice1*,BloombergLP::balb::Choice1*,bsl::allocator) (*((rsp + 0x18)), rdi); 0x0041a7e9 mov qword [rsp + 8], r12 | *((rsp + 8)) = r12; 0x0041a7ee lea rdx, [rsp + 8] | rdx = rsp + 8; 0x0041a7f3 mov rdi, r13 | rdi = r13; 0x0041a7f6 mov rsi, r13 | 0x0041a7f9 call 0x419d40 | voidBloombergLP::bslalg::ArrayDestructionPrimitives::destroy>(BloombergLP::balb::Choice1*,BloombergLP::balb::Choice1*,bsl::allocator) (rdi, r13); | label_0: 0x0041a7fe add rsp, 0x58 | 0x0041a802 pop rbx | 0x0041a803 pop r12 | 0x0041a805 pop r13 | 0x0041a807 pop r14 | 0x0041a809 pop r15 | 0x0041a80b pop rbp | 0x0041a80c ret | return rax; | }