; assembly | /* r2dec pseudo code output */ | /* bdlt_defaulttimetablecache.t/assume @ 0x409fb0 */ | #include | ; (fcn) method.BloombergLP::bdlc::CompactedArray_CountedValue_BloombergLP::bdlt::Timetable_Day__bsl::vector_BloombergLP::bdlc::CompactedArray_CountedValue_BloombergLP::bdlt::Timetable_Day___bsl::allocator_BloombergLP::bdlc::CompactedArray_CountedValue_Bloomberg () | int64_t method_BloombergLP::bdlc::CompactedArray_CountedValue_BloombergLP::bdlt::Timetable_Day_bsl::vector_BloombergLP::bdlc::CompactedArray_CountedValue_BloombergLP::bdlt::Timetable_Day_bsl::allocator_BloombergLP::bdlc::CompactedArray_CountedValue_Bloomberg (int64_t arg3, int64_t arg2, int64_t arg1) { | int64_t var_8h; | int64_t var_10h; | int64_t var_18h; | int64_t var_28h; | int64_t var_30h; | int64_t var_38h; | int64_t var_40h; | int64_t var_48h; | int64_t var_50h; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlc::CompactedArray_CountedValue& bsl::vector, bsl::allocator > >::emplace_back(BloombergLP::bdlt::Timetable_Day const&, unsigned long&) */ 0x00409fb0 push rbp | 0x00409fb1 push r15 | 0x00409fb3 push r14 | 0x00409fb5 push r13 | 0x00409fb7 push r12 | 0x00409fb9 push rbx | 0x00409fba sub rsp, 0x58 | 0x00409fbe mov r15, rdx | r15 = rdx; 0x00409fc1 mov rbx, rsi | rbx = rsi; 0x00409fc4 mov r12, rdi | r12 = rdi; 0x00409fc7 mov rdi, qword [rdi + 8] | rdi = *((rdi + 8)); 0x00409fcb mov rsi, qword [r12 + 0x10] | rsi = *((r12 + 0x10)); 0x00409fd0 mov rax, rdi | rax = rdi; 0x00409fd3 sub rax, qword [r12] | rax -= *(r12); 0x00409fd7 sar rax, 4 | rax >>= 4; 0x00409fdb movabs rbp, 0xaaaaaaaaaaaaaaab | 0x00409fe5 imul rax, rbp | rax *= rbp; 0x00409fe9 cmp rsi, rax | | if (rsi > rax) { 0x00409fec jbe 0x40a036 | 0x00409fee mov rax, qword [r12 + 0x18] | rax = *((r12 + 0x18)); 0x00409ff3 mov rcx, qword [r15] | rcx = *(r15); 0x00409ff6 mov qword [rdi + 0x28], rcx | *((rdi + 0x28)) = rcx; 0x00409ffa mov ecx, dword [rbx] | ecx = *(rbx); 0x00409ffc mov dword [rdi], ecx | 0x00409ffe add rbx, 8 | rbx += 8; 0x0040a002 add rdi, 8 | rdi += 8; 0x0040a006 mov qword [rsp], rax | *(rsp) = rax; 0x0040a00a mov rdx, rsp | 0x0040a00d mov rsi, rbx | 0x0040a010 call 0x409110 | bsl::vector>::vector(bsl::vector>const&,bsl::allocatorconst&) (ecx, rbx, rsp); 0x0040a015 mov rax, qword [r12 + 8] | rax = *((r12 + 8)); 0x0040a01a add rax, 0x30 | rax += 0x30; 0x0040a01e mov qword [r12 + 8], rax | *((r12 + 8)) = rax; | label_2: 0x0040a023 add rax, 0xffffffffffffffd0 | rax += 0xffffffffffffffd0; 0x0040a027 add rsp, 0x58 | 0x0040a02b pop rbx | 0x0040a02c pop r12 | 0x0040a02e pop r13 | 0x0040a030 pop r14 | 0x0040a032 pop r15 | 0x0040a034 pop rbp | 0x0040a035 ret | return rax; | } 0x0040a036 inc rax | rax++; 0x0040a039 movabs rdx, 0x555555555555555 | rdx = 0x555555555555555; 0x0040a043 mov rdi, rax | 0x0040a046 call 0x424d10 | rax = bsl::Vector_Util::computeNewCapacity(unsigned long,unsigned long,unsigned long) (rax, rsi, rdx); 0x0040a04b mov r13, rax | r13 = rax; 0x0040a04e mov rdi, qword [r12 + 0x18] | rdi = *((r12 + 0x18)); 0x0040a053 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0040a056 movaps xmmword [rsp], xmm0 | *(rsp) = xmm0; 0x0040a05a mov qword [rsp + 0x10], 0 | *((rsp + 0x10)) = 0; 0x0040a063 mov qword [rsp + 0x18], rdi | *((rsp + 0x18)) = rdi; 0x0040a068 shl rax, 4 | rax <<= 4; 0x0040a06c lea rsi, [rax + rax*2] | rsi = rax * 3; 0x0040a070 mov rax, qword [rdi] | rax = *(rdi); 0x0040a073 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x0040a076 mov r14, rax | r14 = rax; 0x0040a079 mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x0040a07e mov qword [rsp], rax | *(rsp) = rax; 0x0040a082 mov qword [rsp + 0x10], r13 | *((rsp + 0x10)) = r13; 0x0040a087 mov r13, qword [r12 + 8] | r13 = *((r12 + 8)); 0x0040a08c sub r13, qword [r12] | r13 -= *(r12); 0x0040a090 mov rax, qword [r12 + 0x18] | rax = *((r12 + 0x18)); 0x0040a095 mov rcx, qword [r15] | rcx = *(r15); 0x0040a098 mov qword [r14 + r13 + 0x28], rcx | *((r14 + r13 + 0x28)) = rcx; 0x0040a09d mov ecx, dword [rbx] | ecx = *(rbx); 0x0040a09f mov dword [r14 + r13], ecx | *((r14 + r13)) = ecx; 0x0040a0a3 add rbx, 8 | rbx += 8; 0x0040a0a7 lea rdi, [r14 + r13 + 8] | 0x0040a0ac mov qword [rsp + 0x30], rax | *((rsp + 0x30)) = rax; 0x0040a0b1 lea rdx, [rsp + 0x30] | 0x0040a0b6 mov qword [rsp + 0x40], rdi | *((rsp + 0x40)) = rdi; 0x0040a0bb mov rsi, rbx | 0x0040a0be call 0x409110 | bsl::vector>::vector(bsl::vector>const&,bsl::allocatorconst&) (r14 + r13 + 8, rbx, rsp + 0x30); 0x0040a0c3 mov r15, qword [r12] | r15 = *(r12); 0x0040a0c7 mov rax, qword [r12 + 8] | rax = *((r12 + 8)); 0x0040a0cc cmp r15, rax | | if (r15 == rax) { 0x0040a0cf je 0x40a16b | goto label_3; | } 0x0040a0d5 mov qword [rsp + 0x28], r14 | *((rsp + 0x28)) = r14; 0x0040a0da mov qword [rsp + 0x50], r13 | *((rsp + 0x50)) = r13; 0x0040a0df sar r13, 4 | r13 >>= 4; 0x0040a0e3 imul r13, rbp | r13 *= rbp; 0x0040a0e7 mov qword [rsp + 0x38], r13 | *((rsp + 0x38)) = r13; 0x0040a0ec mov rbp, qword [rsp] | rbp = *(rsp); 0x0040a0f0 mov r14, rax | r14 = rax; 0x0040a0f3 mov rbx, qword [r12 + 0x18] | rbx = *((r12 + 0x18)); 0x0040a0f8 mov qword [rsp + 0x48], rax | *((rsp + 0x48)) = rax; 0x0040a0fd sub r14, r15 | r14 -= r15; 0x0040a100 xor r13d, r13d | r13d = 0; | do { 0x0040a103 mov rax, qword [r15 + r13 + 0x28] | rax = *((r15 + r13 + 0x28)); 0x0040a108 mov qword [rbp + r13 + 0x28], rax | *((rbp + r13 + 0x28)) = rax; 0x0040a10d mov eax, dword [r15 + r13] | eax = *((r15 + r13)); 0x0040a111 mov dword [rbp + r13], eax | *((rbp + r13)) = eax; 0x0040a116 lea rsi, [r15 + r13 + 8] | 0x0040a11b lea rdi, [rbp + r13 + 8] | 0x0040a120 mov qword [rsp + 0x30], rbx | *((rsp + 0x30)) = rbx; 0x0040a125 lea rdx, [rsp + 0x30] | 0x0040a12a call 0x409110 | bsl::vector>::vector(bsl::vector>const&,bsl::allocatorconst&) (rbp + r13 + 8, r15 + r13 + 8, rsp + 0x30); 0x0040a12f add r13, 0x30 | r13 += 0x30; 0x0040a133 cmp r14, r13 | 0x0040a136 jne 0x40a103 | | } while (r14 != r13); 0x0040a138 mov r14, qword [rsp + 0x28] | r14 = *((rsp + 0x28)); 0x0040a13d mov r13, qword [rsp + 0x50] | r13 = *((rsp + 0x50)); 0x0040a142 mov rbx, qword [rsp + 0x48] | rbx = *((rsp + 0x48)); 0x0040a147 jmp 0x40a152 | | while (rsi == 0) { | label_0: 0x0040a149 add r15, 0x30 | r15 += 0x30; 0x0040a14d cmp rbx, r15 | | if (rbx == r15) { 0x0040a150 je 0x40a167 | goto label_4; | } 0x0040a152 mov rsi, qword [r15 + 8] | rsi = *((r15 + 8)); 0x0040a156 test rsi, rsi | 0x0040a159 je 0x40a149 | | } 0x0040a15b mov rdi, qword [r15 + 0x20] | rdi = *((r15 + 0x20)); 0x0040a15f mov rax, qword [rdi] | rax = *(rdi); 0x0040a162 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0040a165 jmp 0x40a149 | goto label_0; | label_4: 0x0040a167 mov r15, qword [r12] | r15 = *(r12); | label_3: 0x0040a16b add r14, r13 | r14 += r13; 0x0040a16e mov qword [r12 + 8], r15 | *((r12 + 8)) = r15; 0x0040a173 add r14, 0x30 | r14 += 0x30; 0x0040a177 mov qword [rsp + 8], r14 | *((rsp + 8)) = r14; 0x0040a17c mov rsi, rsp | 0x0040a17f mov rdi, r12 | 0x0040a182 call 0x424d40 | bsl::Vector_Util::swap(void*,void*) (r12, rsp); 0x0040a187 mov rbx, qword [rsp] | rbx = *(rsp); 0x0040a18b test rbx, rbx | | if (rbx == 0) { 0x0040a18e je 0x40a1cc | goto label_5; | } 0x0040a190 mov rbp, qword [rsp + 8] | rbp = *((rsp + 8)); 0x0040a195 cmp rbx, rbp | | if (rbx != rbp) { 0x0040a198 jne 0x40a1a5 | goto label_6; | } 0x0040a19a jmp 0x40a1be | goto label_7; | do { | label_1: 0x0040a19c add rbx, 0x30 | rbx += 0x30; 0x0040a1a0 cmp rbp, rbx | | if (rbp == rbx) { 0x0040a1a3 je 0x40a1ba | goto label_8; | } | label_6: 0x0040a1a5 mov rsi, qword [rbx + 8] | rsi = *((rbx + 8)); 0x0040a1a9 test rsi, rsi | 0x0040a1ac je 0x40a19c | | } while (rsi == 0); 0x0040a1ae mov rdi, qword [rbx + 0x20] | rdi = *((rbx + 0x20)); 0x0040a1b2 mov rax, qword [rdi] | rax = *(rdi); 0x0040a1b5 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0040a1b8 jmp 0x40a19c | goto label_1; | label_8: 0x0040a1ba mov rbx, qword [rsp] | rbx = *(rsp); | label_7: 0x0040a1be mov rdi, qword [rsp + 0x18] | rdi = *((rsp + 0x18)); 0x0040a1c3 mov rax, qword [rdi] | rax = *(rdi); 0x0040a1c6 mov rsi, rbx | rsi = rbx; 0x0040a1c9 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | label_5: 0x0040a1cc mov rax, qword [r12 + 8] | rax = *((r12 + 8)); 0x0040a1d1 jmp 0x40a023 | goto label_2; | }