; assembly | /* r2dec pseudo code output */ | /* bdlt_defaulttimetablecache.t/assume @ 0x40a6b0 */ | #include | ; (fcn) method.void_BloombergLP::bslalg::ArrayPrimitives::destructiveMoveAndEmplace_bsl::allocator_BloombergLP::bdlc::CompactedArray_CountedValue_BloombergLP::bdlt::Timetable_Day_____BloombergLP::bdlc::CompactedArray_CountedValue_BloombergLP::bdlt.Timetable_Day_ () | int64_t method_void_BloombergLP::bslalg::ArrayPrimitives::destructiveMoveAndEmplace_bsl::allocator_BloombergLP::bdlc::CompactedArray_CountedValue_BloombergLP::bdlt::Timetable_Day_BloombergLP::bdlc::CompactedArray_CountedValue_BloombergLP::bdlt_Timetable_Day_ (int64_t arg_80h, int64_t arg6, int64_t arg5, int64_t arg4, uint32_t arg3, uint32_t arg2, int64_t arg1) { | int64_t var_8h; | uint32_t var_10h; | uint32_t var_18h; | uint32_t var_20h; | int64_t var_28h; | uint32_t var_30h; | int64_t var_38h; | int64_t var_40h; | r9 = arg6; | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* void BloombergLP::bslalg::ArrayPrimitives::destructiveMoveAndEmplace >, BloombergLP::bdlc::CompactedArray_CountedValue >(bsl::allocator_traits > >::pointer, bsl::allocator_traits > >::pointer*, bsl::allocator_traits > >::pointer, bsl::allocator_traits > >::pointer, bsl::allocator_traits > >::pointer, bsl::allocator >, BloombergLP::bdlc::CompactedArray_CountedValue&&) */ 0x0040a6b0 push rbp | 0x0040a6b1 push r15 | 0x0040a6b3 push r14 | 0x0040a6b5 push r13 | 0x0040a6b7 push r12 | 0x0040a6b9 push rbx | 0x0040a6ba sub rsp, 0x48 | 0x0040a6be mov r12, r8 | r12 = r8; 0x0040a6c1 mov r15, rcx | r15 = rcx; 0x0040a6c4 mov rax, rsi | rax = rsi; 0x0040a6c7 mov qword [rsp + 0x18], rsi | *((rsp + 0x18)) = rsi; 0x0040a6cc mov rbx, rdi | rbx = rdi; 0x0040a6cf mov rsi, qword [rsp + 0x80] | 0x0040a6d7 mov qword [rax], r8 | *(rax) = r8; 0x0040a6da mov rbp, rcx | 0x0040a6dd mov qword [rsp + 0x10], rdx | *((rsp + 0x10)) = rdx; 0x0040a6e2 sub rbp, rdx | rbp -= rdx; 0x0040a6e5 lea r13, [rdi + rbp] | r13 = rdi + rbp; 0x0040a6e9 mov qword [rsp + 0x28], r9 | *((rsp + 0x28)) = r9; 0x0040a6ee mov rax, qword [r9] | rax = *(r9); 0x0040a6f1 mov rcx, qword [rsi + 0x28] | rcx = *((rsi + 0x28)); 0x0040a6f5 mov qword [rdi + rbp + 0x28], rcx | *((rdi + rbp + 0x28)) = rcx; 0x0040a6fa mov ecx, dword [rsi] | ecx = *(rsi); 0x0040a6fc mov dword [rdi + rbp], ecx | *((rdi + rbp)) = ecx; 0x0040a6ff add rsi, 8 | rsi += 8; 0x0040a703 lea rdi, [rdi + rbp + 8] | 0x0040a708 mov qword [rsp], rax | *(rsp) = rax; 0x0040a70c mov rdx, rsp | 0x0040a70f call 0x409110 | bsl::vector>::vector(bsl::vector>const&,bsl::allocatorconst&) (rdi + rbp + 8, *((rsp + 0x80)), rsp); 0x0040a714 mov qword [rsp + 0x30], rbp | *((rsp + 0x30)) = rbp; 0x0040a719 lea r14, [rbx + rbp + 0x30] | r14 = rbx + rbp + 0x30; 0x0040a71e mov qword [rsp + 0x20], r12 | *((rsp + 0x20)) = r12; 0x0040a723 cmp r15, r12 | 0x0040a726 mov r12, qword [rsp + 0x18] | r12 = *((rsp + 0x18)); | if (r15 == r12) { 0x0040a72b je 0x40a7e0 | goto label_2; | } 0x0040a731 mov qword [rsp + 8], r14 | *((rsp + 8)) = r14; 0x0040a736 mov rax, qword [rsp + 0x30] | rax = *((rsp + 0x30)); 0x0040a73b sar rax, 4 | rax >>= 4; 0x0040a73f movabs rcx, 0xaaaaaaaaaaaaaaab | rcx = 0xaaaaaaaaaaaaaaab; 0x0040a749 imul rcx, rax | rcx *= rax; 0x0040a74d mov qword [rsp + 0x38], rcx | *((rsp + 0x38)) = rcx; 0x0040a752 mov rax, qword [rsp + 0x28] | rax = *((rsp + 0x28)); 0x0040a757 mov rax, qword [rax] | rax = *(rax); 0x0040a75a mov qword [rsp + 0x40], rax | *((rsp + 0x40)) = rax; 0x0040a75f mov r14, qword [rsp + 0x20] | r14 = *((rsp + 0x20)); 0x0040a764 sub r14, r15 | r14 -= r15; 0x0040a767 xor ebp, ebp | ebp = 0; 0x0040a769 xor r12d, r12d | r12d = 0; 0x0040a76c nop dword [rax] | | do { 0x0040a770 mov rax, qword [r15 + r12 + 0x28] | rax = *((r15 + r12 + 0x28)); 0x0040a775 mov qword [r13 + r12 + 0x58], rax | *((r13 + r12 + 0x58)) = rax; 0x0040a77a mov eax, dword [r15 + r12] | eax = *((r15 + r12)); 0x0040a77e mov dword [r13 + r12 + 0x30], eax | *((r13 + r12 + 0x30)) = eax; 0x0040a783 lea rsi, [r15 + r12 + 8] | 0x0040a788 lea rdi, [r13 + r12 + 0x38] | 0x0040a78d mov rax, qword [rsp + 0x40] | rax = *((rsp + 0x40)); 0x0040a792 mov qword [rsp], rax | *(rsp) = rax; 0x0040a796 mov rdx, rsp | 0x0040a799 call 0x409110 | bsl::vector>::vector(bsl::vector>const&,bsl::allocatorconst&) (r13 + r12 + 0x38, r15 + r12 + 8, rsp); 0x0040a79e add r12, 0x30 | r12 += 0x30; 0x0040a7a2 dec rbp | rbp--; 0x0040a7a5 cmp r14, r12 | 0x0040a7a8 jne 0x40a770 | | } while (r14 != r12); 0x0040a7aa mov rbp, r15 | 0x0040a7ad mov r14, qword [rsp + 8] | r14 = *((rsp + 8)); 0x0040a7b2 mov r12, qword [rsp + 0x18] | r12 = *((rsp + 0x18)); 0x0040a7b7 jmp 0x40a7cb | | while (rsi == 0) { | label_0: 0x0040a7c0 add rbp, 0x30 | rbp += 0x30; 0x0040a7c4 cmp qword [rsp + 0x20], rbp | | if (*((rsp + 0x20)) == rbp) { 0x0040a7c9 je 0x40a7e0 | goto label_2; | } 0x0040a7cb mov rsi, qword [rbp + 8] | rsi = *((rbp + 8)); 0x0040a7cf test rsi, rsi | 0x0040a7d2 je 0x40a7c0 | | } 0x0040a7d4 mov rdi, qword [rbp + 0x20] | rdi = *((rbp + 0x20)); 0x0040a7d8 mov rax, qword [rdi] | rax = *(rdi); 0x0040a7db call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0040a7de jmp 0x40a7c0 | goto label_0; | label_2: 0x0040a7e0 mov qword [r12], r15 | *(r12) = r15; 0x0040a7e4 cmp qword [rsp + 0x10], r15 | | if (*((rsp + 0x10)) == r15) { 0x0040a7e9 je 0x40a87e | goto label_3; | } 0x0040a7ef mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x0040a7f4 sub rax, r15 | rax -= r15; 0x0040a7f7 add r14, rax | r14 += rax; 0x0040a7fa mov qword [rsp + 8], r14 | *((rsp + 8)) = r14; 0x0040a7ff mov rax, qword [rsp + 0x28] | rax = *((rsp + 0x28)); 0x0040a804 mov r14, qword [rax] | r14 = *(rax); 0x0040a807 xor ebp, ebp | ebp = 0; 0x0040a809 mov r12, rsp | r12 = rsp; 0x0040a80c nop dword [rax] | | do { 0x0040a810 mov rcx, qword [rsp + 0x10] | rcx = *((rsp + 0x10)); 0x0040a815 mov rax, qword [rcx + rbp + 0x28] | rax = *((rcx + rbp + 0x28)); 0x0040a81a mov qword [rbx + rbp + 0x28], rax | *((rbx + rbp + 0x28)) = rax; 0x0040a81f mov eax, dword [rcx + rbp] | eax = *((rcx + rbp)); 0x0040a822 mov dword [rbx + rbp], eax | *((rbx + rbp)) = eax; 0x0040a825 lea rsi, [rcx + rbp + 8] | 0x0040a82a lea rdi, [rbx + rbp + 8] | 0x0040a82f mov qword [rsp], r14 | *(rsp) = r14; 0x0040a833 mov rdx, r12 | 0x0040a836 call 0x409110 | bsl::vector>::vector(bsl::vector>const&,bsl::allocatorconst&) (rbx + rbp + 8, rcx + rbp + 8, r12); 0x0040a83b add rbp, 0x30 | rbp += 0x30; 0x0040a83f cmp qword [rsp + 0x30], rbp | 0x0040a844 jne 0x40a810 | | } while (*((rsp + 0x30)) != rbp); 0x0040a846 mov rbx, qword [rsp + 0x10] | rbx = *((rsp + 0x10)); 0x0040a84b mov r12, qword [rsp + 0x18] | r12 = *((rsp + 0x18)); 0x0040a850 jmp 0x40a869 | | while (rsi == 0) { | label_1: 0x0040a860 add rbx, 0x30 | rbx += 0x30; 0x0040a864 cmp r15, rbx | | if (r15 == rbx) { 0x0040a867 je 0x40a87e | goto label_3; | } 0x0040a869 mov rsi, qword [rbx + 8] | rsi = *((rbx + 8)); 0x0040a86d test rsi, rsi | 0x0040a870 je 0x40a860 | | } 0x0040a872 mov rdi, qword [rbx + 0x20] | rdi = *((rbx + 0x20)); 0x0040a876 mov rax, qword [rdi] | rax = *(rdi); 0x0040a879 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0040a87c jmp 0x40a860 | goto label_1; | label_3: 0x0040a87e mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x0040a883 mov qword [r12], rax | *(r12) = rax; 0x0040a887 add rsp, 0x48 | 0x0040a88b pop rbx | 0x0040a88c pop r12 | 0x0040a88e pop r13 | 0x0040a890 pop r14 | 0x0040a892 pop r15 | 0x0040a894 pop rbp | 0x0040a895 ret | return rax; | }