; assembly | /* r2dec pseudo code output */ | /* bdlt_defaulttimetablecache.t/assume @ 0x409c00 */ | #include | ; (fcn) method.BloombergLP::bdlc::CompactedArray_BloombergLP::bdlt::Timetable_Day_.increment_BloombergLP::bdlt::Timetable_Day_const__unsigned_long_ () | uint64_t method_BloombergLP::bdlc::CompactedArray_BloombergLP::bdlt::Timetable_Day_increment_BloombergLP::bdlt::Timetable_Day_const_unsigned_long_ (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_48h; | int64_t var_50h; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlc::CompactedArray::increment(BloombergLP::bdlt::Timetable_Day const&, unsigned long) */ 0x00409c00 push rbp | 0x00409c01 push r15 | 0x00409c03 push r14 | 0x00409c05 push r13 | 0x00409c07 push r12 | 0x00409c09 push rbx | 0x00409c0a sub rsp, 0x58 | 0x00409c0e mov r8, rsi | r8 = rsi; 0x00409c11 mov r14, rdi | r14 = rdi; 0x00409c14 mov qword [rsp], rdx | *(rsp) = rdx; 0x00409c18 mov qword [rsp + 0x18], rdx | *((rsp + 0x18)) = rdx; 0x00409c1d mov r15, qword [rdi] | r15 = *(rdi); 0x00409c20 mov rbp, qword [rdi + 8] | rbp = *((rdi + 8)); 0x00409c24 mov r13, rbp | r13 = *((rdi + 8)); 0x00409c27 movabs rbx, 0xaaaaaaaaaaaaaaab | rbx = 0xaaaaaaaaaaaaaaab; 0x00409c31 sub r13, r15 | r13 -= r15; | if (r13 == 0) { 0x00409c34 je 0x409d00 | goto label_4; | } 0x00409c3a mov qword [rsp + 8], r14 | *((rsp + 8)) = r14; 0x00409c3f sar r13, 4 | r13 >>= 4; 0x00409c43 imul r13, rbx | r13 *= rbx; 0x00409c47 mov rbp, r13 | 0x00409c4a mov qword [rsp + 0x10], r8 | *((rsp + 0x10)) = r8; 0x00409c4f jmp 0x409c75 | | while (*((r15 + rax)) < ecx) { | label_1: 0x00409c60 add rbx, 0x30 | rbx += 0x30; 0x00409c64 not rbp | rbp = ~rbp; 0x00409c67 add rbp, r13 | rbp += r13; 0x00409c6a mov r15, rbx | r15 = rbx; | label_0: 0x00409c6d mov r13, rbp | r13 = rbp; 0x00409c70 test rbp, rbp | | if (rbp == 0) { 0x00409c73 je 0x409ced | goto label_5; | } 0x00409c75 shr rbp, 1 | rbp >>= 1; 0x00409c78 lea rax, [rbp + rbp*2] | rax = rbp + rbp*2; 0x00409c7d shl rax, 4 | rax <<= 4; 0x00409c81 lea rbx, [r15 + rax] | rbx = r15 + rax; 0x00409c85 mov ecx, dword [r8] | ecx = *(r8); 0x00409c88 cmp dword [r15 + rax], ecx | 0x00409c8c jl 0x409c60 | | } | if (*((r15 + rax)) != ecx) { 0x00409c8e jne 0x409c6d | goto label_0; | } 0x00409c90 mov rdx, qword [r15 + rax + 8] | rdx = *((r15 + rax + 8)); 0x00409c95 mov rsi, qword [r15 + rax + 0x10] | rsi = *((r15 + rax + 0x10)); 0x00409c9a mov r14, rsi | r14 = *((r15 + rax + 0x10)); 0x00409c9d sub r14, rdx | r14 -= rdx; 0x00409ca0 sar r14, 4 | r14 >>= 4; 0x00409ca4 mov rax, qword [r8 + 8] | rax = *((r8 + 8)); 0x00409ca8 mov rcx, qword [r8 + 0x10] | rcx = *((r8 + 0x10)); 0x00409cac mov r12, rcx | r12 = *((r8 + 0x10)); 0x00409caf sub r12, rax | r12 -= rax; 0x00409cb2 sar r12, 4 | r12 >>= 4; 0x00409cb6 cmp r12, r14 | | if (r12 < r14) { 0x00409cb9 jae 0x409cca | 0x00409cbb mov rdi, rax | 0x00409cbe mov rsi, rcx | 0x00409cc1 call 0x40a4d0 | eax = intBloombergLP::bslalg::RangeCompare_Imp::lexicographical(BloombergLP::bdlt::Timetable_CompactableTransitionconst*,BloombergLP::bdlt::Timetable_CompactableTransitionconst*,BloombergLP::bdlt::Timetable_CompactableTransitionconst*) (rax, rcx, rdx); 0x00409cc6 neg eax | eax = -eax; 0x00409cc8 jmp 0x409cd5 | | } else { 0x00409cca mov rdi, rdx | 0x00409ccd mov rdx, rax | 0x00409cd0 call 0x40a4d0 | eax = intBloombergLP::bslalg::RangeCompare_Imp::lexicographical(BloombergLP::bdlt::Timetable_CompactableTransitionconst*,BloombergLP::bdlt::Timetable_CompactableTransitionconst*,BloombergLP::bdlt::Timetable_CompactableTransitionconst*) (rdx, rsi, rax); | } 0x00409cd5 test eax, eax | 0x00409cd7 mov r8, qword [rsp + 0x10] | r8 = *((rsp + 0x10)); | if (eax < 0) { 0x00409cdc js 0x409c60 | goto label_1; | } 0x00409cde cmp r14, r12 | | if (r14 >= r12) { 0x00409ce1 jae 0x409c6d | goto label_0; | } 0x00409ce3 test eax, eax | | if (eax == 0) { 0x00409ce5 je 0x409c60 | goto label_1; | } 0x00409ceb jmp 0x409c6d | goto label_0; | label_5: 0x00409ced mov r14, qword [rsp + 8] | r14 = *((rsp + 8)); 0x00409cf2 mov rbp, qword [r14 + 8] | rbp = *((r14 + 8)); 0x00409cf6 movabs rbx, 0xaaaaaaaaaaaaaaab | rbx = 0xaaaaaaaaaaaaaaab; | label_4: 0x00409d00 cmp r15, rbp | | if (r15 == rbp) { 0x00409d03 je 0x409dc9 | goto label_6; | } 0x00409d09 mov eax, dword [r15] | eax = *(r15); 0x00409d0c cmp dword [r8], eax | | if (*(r8) >= eax) { 0x00409d0f jge 0x409de6 | goto label_7; | } | label_3: 0x00409d15 mov rbp, r15 | 0x00409d18 sub rbp, qword [r14] | rbp -= *(r14); 0x00409d1b mov rax, qword [r14 + 0x18] | rax = *((r14 + 0x18)); 0x00409d1f mov rcx, qword [rsp] | rcx = *(rsp); 0x00409d23 mov qword [rsp + 0x50], rcx | *((rsp + 0x50)) = rcx; 0x00409d28 mov ecx, dword [r8] | ecx = *(r8); 0x00409d2b mov dword [rsp + 0x28], ecx | *((rsp + 0x28)) = ecx; 0x00409d2f add r8, 8 | r8 += 8; 0x00409d33 lea rdi, [rsp + 0x30] | 0x00409d38 mov qword [rsp + 0x20], rax | *((rsp + 0x20)) = rax; 0x00409d3d lea rdx, [rsp + 0x20] | 0x00409d42 mov rsi, r8 | 0x00409d45 call 0x409110 | bsl::vector>::vector(bsl::vector>const&,bsl::allocatorconst&) (rsp + 0x30, r8, rsp + 0x20); 0x00409d4a lea rdx, [rsp + 0x28] | 0x00409d4f mov rdi, r14 | 0x00409d52 mov rsi, r15 | 0x00409d55 call 0x40a2d0 | bsl::vector,bsl::allocator>>::insert(BloombergLP::bdlc::CompactedArray_CountedValueconst*,BloombergLP::bdlc::CompactedArray_CountedValue&&) (r14, r15, rsp + 0x28); 0x00409d5a mov rsi, qword [rsp + 0x30] | rsi = *((rsp + 0x30)); 0x00409d5f test rsi, rsi | | if (rsi != 0) { 0x00409d62 je 0x409d6f | 0x00409d64 mov rdi, qword [rsp + 0x48] | rdi = *((rsp + 0x48)); 0x00409d69 mov rax, qword [rdi] | rax = *(rdi); 0x00409d6c call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x00409d6f sar rbp, 4 | rbp >>= 4; 0x00409d73 imul rbp, rbx | rbp *= rbx; 0x00409d77 cmp qword [r14 + 0x28], 0 | | if (*((r14 + 0x28)) == 0) { 0x00409d7c je 0x409e5c | goto label_8; | } 0x00409d82 lea r15, [r14 + 0x20] | r15 = r14 + 0x20; 0x00409d86 xor ebx, ebx | ebx = 0; 0x00409d88 jmp 0x409d9d | | while (rax < rbp) { | label_2: 0x00409d90 inc rbx | rbx++; 0x00409d93 cmp rbx, qword [r14 + 0x28] | | if (rbx >= *((r14 + 0x28))) { 0x00409d97 jae 0x409e5c | goto label_8; | } 0x00409d9d mov rdi, r15 | 0x00409da0 mov rsi, rbx | rsi = rbx; 0x00409da3 call 0x4164f0 | rax = BloombergLP::bdlc::PackedIntArrayImp::operator [] (unsigned long)const (r15); 0x00409da8 cmp rax, rbp | 0x00409dab jb 0x409d90 | | } 0x00409dad mov rdi, r15 | 0x00409db0 mov rsi, rbx | rsi = rbx; 0x00409db3 call 0x4164f0 | BloombergLP::bdlc::PackedIntArrayImp::operator [] (unsigned long)const (r15); 0x00409db8 lea rdx, [rax + 1] | 0x00409dbc mov rdi, r15 | 0x00409dbf mov rsi, rbx | 0x00409dc2 call 0x415e10 | BloombergLP::bdlc::PackedIntArrayImp::replace(unsigned long,unsigned long) (r15, rbx, rax + 1, rcx, r8); 0x00409dc7 jmp 0x409d90 | goto label_2; | label_6: 0x00409dc9 sub rbp, qword [r14] | rbp -= *(r14); 0x00409dcc sar rbp, 4 | rbp >>= 4; 0x00409dd0 imul rbp, rbx | rbp *= rbx; 0x00409dd4 lea rdx, [rsp + 0x18] | 0x00409dd9 mov rdi, r14 | 0x00409ddc mov rsi, r8 | 0x00409ddf call 0x409fb0 | BloombergLP::bdlc::CompactedArray_CountedValue&bsl::vector,bsl::allocator>>::emplace_back(BloombergLP::bdlt::Timetable_Dayconst&,unsigned long&) (r14, r8, rsp + 0x18); 0x00409de4 jmp 0x409e5c | goto label_8; | if (rbp != 0) { | label_7: 0x00409de6 jne 0x409e46 | goto label_9; | } 0x00409de8 mov rdx, qword [r8 + 8] | rdx = *((r8 + 8)); 0x00409dec mov r13, r8 | r13 = r8; 0x00409def mov rsi, qword [r8 + 0x10] | rsi = *((r8 + 0x10)); 0x00409df3 mov r12, rsi | r12 = *((r8 + 0x10)); 0x00409df6 sub r12, rdx | r12 -= rdx; 0x00409df9 sar r12, 4 | r12 >>= 4; 0x00409dfd mov rax, qword [r15 + 8] | rax = *((r15 + 8)); 0x00409e01 mov rcx, qword [r15 + 0x10] | rcx = *((r15 + 0x10)); 0x00409e05 mov rbp, rcx | 0x00409e08 sub rbp, rax | rbp -= rax; 0x00409e0b sar rbp, 4 | rbp >>= 4; 0x00409e0f cmp rbp, r12 | | if (rbp < r12) { 0x00409e12 jae 0x409e23 | 0x00409e14 mov rdi, rax | 0x00409e17 mov rsi, rcx | 0x00409e1a call 0x40a4d0 | eax = intBloombergLP::bslalg::RangeCompare_Imp::lexicographical(BloombergLP::bdlt::Timetable_CompactableTransitionconst*,BloombergLP::bdlt::Timetable_CompactableTransitionconst*,BloombergLP::bdlt::Timetable_CompactableTransitionconst*) (rax, rcx, rdx); 0x00409e1f neg eax | eax = -eax; 0x00409e21 jmp 0x409e2e | | } else { 0x00409e23 mov rdi, rdx | 0x00409e26 mov rdx, rax | 0x00409e29 call 0x40a4d0 | eax = intBloombergLP::bslalg::RangeCompare_Imp::lexicographical(BloombergLP::bdlt::Timetable_CompactableTransitionconst*,BloombergLP::bdlt::Timetable_CompactableTransitionconst*,BloombergLP::bdlt::Timetable_CompactableTransitionconst*) (rdx, rsi, rax); | } 0x00409e2e test eax, eax | 0x00409e30 mov r8, r13 | r8 = r13; | if (eax < 0) { 0x00409e33 js 0x409d15 | goto label_3; | } 0x00409e39 cmp r12, rbp | | if (r12 >= rbp) { 0x00409e3c jae 0x409e46 | goto label_9; | } 0x00409e3e test eax, eax | | if (eax == 0) { 0x00409e40 je 0x409d15 | goto label_3; | } | label_9: 0x00409e46 mov rbp, r15 | 0x00409e49 sub rbp, qword [r14] | rbp -= *(r14); 0x00409e4c sar rbp, 4 | rbp >>= 4; 0x00409e50 imul rbp, rbx | rbp *= rbx; 0x00409e54 mov rax, qword [rsp] | rax = *(rsp); 0x00409e58 add qword [r15 + 0x28], rax | *((r15 + 0x28)) += rax; | label_8: 0x00409e5c mov rax, rbp | rax = rbp; 0x00409e5f add rsp, 0x58 | 0x00409e63 pop rbx | 0x00409e64 pop r12 | 0x00409e66 pop r13 | 0x00409e68 pop r14 | 0x00409e6a pop r15 | 0x00409e6c pop rbp | 0x00409e6d ret | return rax; | }