; assembly | /* r2dec pseudo code output */ | /* bdlt_defaulttimetablecache.t/none @ 0x409c30 */ | #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) */ 0x00409c30 push rbp | 0x00409c31 push r15 | 0x00409c33 push r14 | 0x00409c35 push r13 | 0x00409c37 push r12 | 0x00409c39 push rbx | 0x00409c3a sub rsp, 0x58 | 0x00409c3e mov r8, rsi | r8 = rsi; 0x00409c41 mov r14, rdi | r14 = rdi; 0x00409c44 mov qword [rsp], rdx | *(rsp) = rdx; 0x00409c48 mov qword [rsp + 0x18], rdx | *((rsp + 0x18)) = rdx; 0x00409c4d mov r12, qword [rdi] | r12 = *(rdi); 0x00409c50 mov rbp, qword [rdi + 8] | rbp = *((rdi + 8)); 0x00409c54 mov r13, rbp | r13 = *((rdi + 8)); 0x00409c57 movabs rbx, 0xaaaaaaaaaaaaaaab | rbx = 0xaaaaaaaaaaaaaaab; 0x00409c61 sub r13, r12 | r13 -= r12; | if (r13 == 0) { 0x00409c64 je 0x409d30 | goto label_4; | } 0x00409c6a mov qword [rsp + 8], r14 | *((rsp + 8)) = r14; 0x00409c6f sar r13, 4 | r13 >>= 4; 0x00409c73 imul r13, rbx | r13 *= rbx; 0x00409c77 mov rbp, r13 | 0x00409c7a mov qword [rsp + 0x10], r8 | *((rsp + 0x10)) = r8; 0x00409c7f jmp 0x409ca5 | | while (*((r12 + rax)) < ecx) { | label_1: 0x00409c90 add rbx, 0x30 | rbx += 0x30; 0x00409c94 not rbp | rbp = ~rbp; 0x00409c97 add rbp, r13 | rbp += r13; 0x00409c9a mov r12, rbx | r12 = rbx; | label_0: 0x00409c9d mov r13, rbp | r13 = rbp; 0x00409ca0 test rbp, rbp | | if (rbp == 0) { 0x00409ca3 je 0x409d1d | goto label_5; | } 0x00409ca5 shr rbp, 1 | rbp >>= 1; 0x00409ca8 lea rax, [rbp + rbp*2] | rax = rbp + rbp*2; 0x00409cad shl rax, 4 | rax <<= 4; 0x00409cb1 lea rbx, [r12 + rax] | rbx = r12 + rax; 0x00409cb5 mov ecx, dword [r8] | ecx = *(r8); 0x00409cb8 cmp dword [r12 + rax], ecx | 0x00409cbc jl 0x409c90 | | } | if (*((r12 + rax)) != ecx) { 0x00409cbe jne 0x409c9d | goto label_0; | } 0x00409cc0 mov rdx, qword [r12 + rax + 8] | rdx = *((r12 + rax + 8)); 0x00409cc5 mov rsi, qword [r12 + rax + 0x10] | rsi = *((r12 + rax + 0x10)); 0x00409cca mov r14, rsi | r14 = *((r12 + rax + 0x10)); 0x00409ccd sub r14, rdx | r14 -= rdx; 0x00409cd0 sar r14, 4 | r14 >>= 4; 0x00409cd4 mov rax, qword [r8 + 8] | rax = *((r8 + 8)); 0x00409cd8 mov rcx, qword [r8 + 0x10] | rcx = *((r8 + 0x10)); 0x00409cdc mov r15, rcx | r15 = *((r8 + 0x10)); 0x00409cdf sub r15, rax | r15 -= rax; 0x00409ce2 sar r15, 4 | r15 >>= 4; 0x00409ce6 cmp r15, r14 | | if (r15 < r14) { 0x00409ce9 jae 0x409cfa | 0x00409ceb mov rdi, rax | 0x00409cee mov rsi, rcx | 0x00409cf1 call 0x40a580 | eax = intBloombergLP::bslalg::RangeCompare_Imp::lexicographical(BloombergLP::bdlt::Timetable_CompactableTransitionconst*,BloombergLP::bdlt::Timetable_CompactableTransitionconst*,BloombergLP::bdlt::Timetable_CompactableTransitionconst*) (rax, rcx, rdx); 0x00409cf6 neg eax | eax = -eax; 0x00409cf8 jmp 0x409d05 | | } else { 0x00409cfa mov rdi, rdx | 0x00409cfd mov rdx, rax | 0x00409d00 call 0x40a580 | eax = intBloombergLP::bslalg::RangeCompare_Imp::lexicographical(BloombergLP::bdlt::Timetable_CompactableTransitionconst*,BloombergLP::bdlt::Timetable_CompactableTransitionconst*,BloombergLP::bdlt::Timetable_CompactableTransitionconst*) (rdx, rsi, rax); | } 0x00409d05 test eax, eax | 0x00409d07 mov r8, qword [rsp + 0x10] | r8 = *((rsp + 0x10)); | if (eax < 0) { 0x00409d0c js 0x409c90 | goto label_1; | } 0x00409d0e cmp r14, r15 | | if (r14 >= r15) { 0x00409d11 jae 0x409c9d | goto label_0; | } 0x00409d13 test eax, eax | | if (eax == 0) { 0x00409d15 je 0x409c90 | goto label_1; | } 0x00409d1b jmp 0x409c9d | goto label_0; | label_5: 0x00409d1d mov r14, qword [rsp + 8] | r14 = *((rsp + 8)); 0x00409d22 mov rbp, qword [r14 + 8] | rbp = *((r14 + 8)); 0x00409d26 movabs rbx, 0xaaaaaaaaaaaaaaab | rbx = 0xaaaaaaaaaaaaaaab; | label_4: 0x00409d30 cmp r12, rbp | | if (r12 == rbp) { 0x00409d33 je 0x409e19 | goto label_6; | } 0x00409d39 mov eax, dword [r12] | eax = *(r12); 0x00409d3d cmp dword [r8], eax | | if (*(r8) >= eax) { 0x00409d40 jge 0x409e36 | goto label_7; | } | label_3: 0x00409d46 mov rbp, r12 | 0x00409d49 sub rbp, qword [r14] | rbp -= *(r14); 0x00409d4c mov rax, qword [r14 + 0x18] | rax = *((r14 + 0x18)); 0x00409d50 mov rcx, qword [rsp] | rcx = *(rsp); 0x00409d54 mov qword [rsp + 0x50], rcx | *((rsp + 0x50)) = rcx; 0x00409d59 mov ecx, dword [r8] | ecx = *(r8); 0x00409d5c mov dword [rsp + 0x28], ecx | *((rsp + 0x28)) = ecx; 0x00409d60 test rax, rax | | if (rax == 0) { 0x00409d63 jne 0x409d7c | 0x00409d65 mov rax, qword [rip + 0x26a08c] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x00409d6c test rax, rax | | if (rax != 0) { 0x00409d6f jne 0x409d7c | goto label_8; | } 0x00409d71 mov r15, r8 | r15 = r8; 0x00409d74 call 0x418350 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00409d79 mov r8, r15 | r8 = r15; | } | label_8: 0x00409d7c add r8, 8 | r8 += 8; 0x00409d80 lea rdi, [rsp + 0x30] | 0x00409d85 mov qword [rsp + 0x20], rax | *((rsp + 0x20)) = rax; 0x00409d8a lea rdx, [rsp + 0x20] | 0x00409d8f mov rsi, r8 | 0x00409d92 call 0x409130 | bsl::vector>::vector(bsl::vector>const&,bsl::allocatorconst&) (rsp + 0x30, r8, rsp + 0x20); 0x00409d97 lea rdx, [rsp + 0x28] | 0x00409d9c mov rdi, r14 | 0x00409d9f mov rsi, r12 | 0x00409da2 call 0x40a380 | bsl::vector,bsl::allocator>>::insert(BloombergLP::bdlc::CompactedArray_CountedValueconst*,BloombergLP::bdlc::CompactedArray_CountedValue&&) (r14, r12, rsp + 0x28); 0x00409da7 mov rsi, qword [rsp + 0x30] | rsi = *((rsp + 0x30)); 0x00409dac test rsi, rsi | | if (rsi != 0) { 0x00409daf je 0x409dbc | 0x00409db1 mov rdi, qword [rsp + 0x48] | rdi = *((rsp + 0x48)); 0x00409db6 mov rax, qword [rdi] | rax = *(rdi); 0x00409db9 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x00409dbc sar rbp, 4 | rbp >>= 4; 0x00409dc0 imul rbp, rbx | rbp *= rbx; 0x00409dc4 cmp qword [r14 + 0x28], 0 | | if (*((r14 + 0x28)) == 0) { 0x00409dc9 je 0x409eaf | goto label_9; | } 0x00409dcf lea r15, [r14 + 0x20] | r15 = r14 + 0x20; 0x00409dd3 xor ebx, ebx | ebx = 0; 0x00409dd5 jmp 0x409ded | | while (rax < rbp) { | label_2: 0x00409de0 inc rbx | rbx++; 0x00409de3 cmp rbx, qword [r14 + 0x28] | | if (rbx >= *((r14 + 0x28))) { 0x00409de7 jae 0x409eaf | goto label_9; | } 0x00409ded mov rdi, r15 | 0x00409df0 mov rsi, rbx | rsi = rbx; 0x00409df3 call 0x416850 | rax = BloombergLP::bdlc::PackedIntArrayImp::operator [] (unsigned long)const (r15); 0x00409df8 cmp rax, rbp | 0x00409dfb jb 0x409de0 | | } 0x00409dfd mov rdi, r15 | 0x00409e00 mov rsi, rbx | rsi = rbx; 0x00409e03 call 0x416850 | BloombergLP::bdlc::PackedIntArrayImp::operator [] (unsigned long)const (r15); 0x00409e08 lea rdx, [rax + 1] | 0x00409e0c mov rdi, r15 | 0x00409e0f mov rsi, rbx | 0x00409e12 call 0x416080 | BloombergLP::bdlc::PackedIntArrayImp::replace(unsigned long,unsigned long) (r15, rbx, rax + 1); 0x00409e17 jmp 0x409de0 | goto label_2; | label_6: 0x00409e19 sub rbp, qword [r14] | rbp -= *(r14); 0x00409e1c sar rbp, 4 | rbp >>= 4; 0x00409e20 imul rbp, rbx | rbp *= rbx; 0x00409e24 lea rdx, [rsp + 0x18] | 0x00409e29 mov rdi, r14 | 0x00409e2c mov rsi, r8 | 0x00409e2f call 0x40a010 | BloombergLP::bdlc::CompactedArray_CountedValue&bsl::vector,bsl::allocator>>::emplace_back(BloombergLP::bdlt::Timetable_Dayconst&,unsigned long&) (r14, r8, rsp + 0x18); 0x00409e34 jmp 0x409eaf | goto label_9; | if (rbp != 0) { | label_7: 0x00409e36 jne 0x409e98 | goto label_10; | } 0x00409e38 mov rdx, qword [r8 + 8] | rdx = *((r8 + 8)); 0x00409e3c mov r13, r8 | r13 = r8; 0x00409e3f mov rsi, qword [r8 + 0x10] | rsi = *((r8 + 0x10)); 0x00409e43 mov r15, rsi | r15 = *((r8 + 0x10)); 0x00409e46 sub r15, rdx | r15 -= rdx; 0x00409e49 sar r15, 4 | r15 >>= 4; 0x00409e4d mov rax, qword [r12 + 8] | rax = *((r12 + 8)); 0x00409e52 mov rcx, qword [r12 + 0x10] | rcx = *((r12 + 0x10)); 0x00409e57 mov rbp, rcx | 0x00409e5a sub rbp, rax | rbp -= rax; 0x00409e5d sar rbp, 4 | rbp >>= 4; 0x00409e61 cmp rbp, r15 | | if (rbp < r15) { 0x00409e64 jae 0x409e75 | 0x00409e66 mov rdi, rax | 0x00409e69 mov rsi, rcx | 0x00409e6c call 0x40a580 | eax = intBloombergLP::bslalg::RangeCompare_Imp::lexicographical(BloombergLP::bdlt::Timetable_CompactableTransitionconst*,BloombergLP::bdlt::Timetable_CompactableTransitionconst*,BloombergLP::bdlt::Timetable_CompactableTransitionconst*) (rax, rcx, rdx); 0x00409e71 neg eax | eax = -eax; 0x00409e73 jmp 0x409e80 | | } else { 0x00409e75 mov rdi, rdx | 0x00409e78 mov rdx, rax | 0x00409e7b call 0x40a580 | eax = intBloombergLP::bslalg::RangeCompare_Imp::lexicographical(BloombergLP::bdlt::Timetable_CompactableTransitionconst*,BloombergLP::bdlt::Timetable_CompactableTransitionconst*,BloombergLP::bdlt::Timetable_CompactableTransitionconst*) (rdx, rsi, rax); | } 0x00409e80 test eax, eax | 0x00409e82 mov r8, r13 | r8 = r13; | if (eax < 0) { 0x00409e85 js 0x409d46 | goto label_3; | } 0x00409e8b cmp r15, rbp | | if (r15 >= rbp) { 0x00409e8e jae 0x409e98 | goto label_10; | } 0x00409e90 test eax, eax | | if (eax == 0) { 0x00409e92 je 0x409d46 | goto label_3; | } | label_10: 0x00409e98 mov rbp, r12 | 0x00409e9b sub rbp, qword [r14] | rbp -= *(r14); 0x00409e9e sar rbp, 4 | rbp >>= 4; 0x00409ea2 imul rbp, rbx | rbp *= rbx; 0x00409ea6 mov rax, qword [rsp] | rax = *(rsp); 0x00409eaa add qword [r12 + 0x28], rax | *((r12 + 0x28)) += rax; | label_9: 0x00409eaf mov rax, rbp | rax = rbp; 0x00409eb2 add rsp, 0x58 | 0x00409eb6 pop rbx | 0x00409eb7 pop r12 | 0x00409eb9 pop r13 | 0x00409ebb pop r14 | 0x00409ebd pop r15 | 0x00409ebf pop rbp | 0x00409ec0 ret | return rax; | }