; assembly | /* r2dec pseudo code output */ | /* bblb_schedulegenerationutil.t/none @ 0x40b6c0 */ | #include | ; (fcn) method.BloombergLP::bblb::ScheduleGenerationUtil.generateFromDayOfMonth_bsl::vector_BloombergLP::bdlt::Date__bsl::allocator_BloombergLP::bdlt::Date_____BloombergLP::bdlt::Date_const__BloombergLP::bdlt::Date_const__int__int__int__int__int_ () | int64_t method_BloombergLP::bblb::ScheduleGenerationUtil_generateFromDayOfMonth_bsl::vector_BloombergLP::bdlt::Date_bsl::allocator_BloombergLP::bdlt::Date_BloombergLP::bdlt::Date_const_BloombergLP::bdlt::Date_const_int_int_int_int_int_ (int64_t arg_60h, int64_t arg_68h, int64_t arg6, int64_t arg5, int64_t arg4, int64_t arg3, int64_t arg2, uint32_t arg1) { | int64_t var_8h; | int64_t var_ch; | uint32_t var_10h; | uint32_t var_14h; | uint32_t var_18h; | uint32_t var_1ch; | uint32_t var_20h; | r9 = arg6; | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bblb::ScheduleGenerationUtil::generateFromDayOfMonth(bsl::vector >*, BloombergLP::bdlt::Date const&, BloombergLP::bdlt::Date const&, int, int, int, int, int) */ 0x0040b6c0 push rbp | 0x0040b6c1 push r15 | 0x0040b6c3 push r14 | 0x0040b6c5 push r13 | 0x0040b6c7 push r12 | 0x0040b6c9 push rbx | 0x0040b6ca sub rsp, 0x28 | 0x0040b6ce mov r15d, r9d | r15d = r9d; 0x0040b6d1 mov r14d, r8d | r14d = r8d; 0x0040b6d4 mov r12d, ecx | r12d = ecx; 0x0040b6d7 mov rbx, rdx | rbx = rdx; 0x0040b6da mov rax, qword [rdi] | rax = *(rdi); 0x0040b6dd cmp qword [rdi + 8], rax | | if (*((rdi + 8)) != rax) { 0x0040b6e1 je 0x40b6e7 | 0x0040b6e3 mov qword [rdi + 8], rax | *((rdi + 8)) = rax; | } 0x0040b6e7 mov qword [rsp + 0x20], rdi | *((rsp + 0x20)) = rdi; 0x0040b6ec mov ecx, dword [rsi] | 0x0040b6ee mov rdi, rsp | 0x0040b6f1 lea rsi, [rsp + 8] | 0x0040b6f6 lea rdx, [rsp + 0x1c] | 0x0040b6fb call 0x414310 | BloombergLP::bdlt::PosixDateImpUtil::serialToYmd(int*,int*,int*,int) (rsp, rsp + 8, rsp + 0x1c, *(rsi)); 0x0040b700 mov eax, dword [rsp] | eax = *(rsp); 0x0040b703 lea eax, [rax + rax*2] | eax = rax * 3; 0x0040b706 mov ecx, dword [rsp + 8] | ecx = *((rsp + 8)); 0x0040b70a lea ebp, [rcx + rax*4 - 1] | ebp = rcx + rax*4 - 1; 0x0040b70e mov ecx, dword [rbx] | 0x0040b710 mov rdi, rsp | 0x0040b713 lea rsi, [rsp + 8] | 0x0040b718 lea rdx, [rsp + 0x18] | 0x0040b71d call 0x414310 | BloombergLP::bdlt::PosixDateImpUtil::serialToYmd(int*,int*,int*,int) (rsp, rsp + 8, rsp + 0x18, *(rbx)); 0x0040b722 mov eax, dword [rsp] | eax = *(rsp); 0x0040b725 lea eax, [rax + rax*2] | eax = rax * 3; 0x0040b728 mov ecx, dword [rsp + 8] | ecx = *((rsp + 8)); 0x0040b72c lea edi, [rcx + rax*4 - 1] | edi = rcx + rax*4 - 1; 0x0040b730 lea eax, [r12 + r12*2] | eax = r12 * 3; 0x0040b734 lea esi, [r14 + rax*4 - 1] | esi = r14 + rax*4 - 1; 0x0040b739 mov dword [rsp + 0x14], ebp | *((rsp + 0x14)) = ebp; 0x0040b73d mov ecx, ebp | ecx = ebp; 0x0040b73f sub ecx, esi | ecx -= esi; | if (ecx > 0) { 0x0040b741 jle 0x40b75b | 0x0040b743 mov eax, ecx | eax = ecx; 0x0040b745 cdq | edx:eax = (int64_t) eax; 0x0040b746 idiv r15d | eax = edx:eax / r15d; | edx = edx:eax % r15d; 0x0040b749 test edx, edx | | if (edx != 0) { 0x0040b74b je 0x40b75b | 0x0040b74d mov eax, ecx | eax = ecx; 0x0040b74f cdq | edx:eax = (int64_t) eax; 0x0040b750 idiv r15d | eax = edx:eax / r15d; | edx = edx:eax % r15d; 0x0040b753 mov r12d, eax | r12d = eax; 0x0040b756 inc r12d | r12d++; 0x0040b759 jmp 0x40b764 | | } | } else { 0x0040b75b mov eax, ecx | eax = ecx; 0x0040b75d cdq | edx:eax = (int64_t) eax; 0x0040b75e idiv r15d | eax = edx:eax / r15d; | edx = edx:eax % r15d; 0x0040b761 mov r12d, eax | r12d = eax; | } 0x0040b764 mov ecx, edi | ecx = edi; 0x0040b766 sub ecx, esi | ecx -= esi; 0x0040b768 js 0x40b775 | | while (edx == 0) { 0x0040b76a mov eax, ecx | eax = ecx; 0x0040b76c cdq | edx:eax = (int64_t) eax; 0x0040b76d idiv r15d | eax = edx:eax / r15d; | edx = edx:eax % r15d; 0x0040b770 mov r13d, eax | r13d = eax; 0x0040b773 jmp 0x40b78b | goto label_0; 0x0040b775 mov eax, ecx | eax = ecx; 0x0040b777 cdq | edx:eax = (int64_t) eax; 0x0040b778 idiv r15d | eax = edx:eax / r15d; | edx = edx:eax % r15d; 0x0040b77b test edx, edx | 0x0040b77d je 0x40b76a | | } 0x0040b77f mov eax, ecx | eax = ecx; 0x0040b781 cdq | edx:eax = (int64_t) eax; 0x0040b782 idiv r15d | eax = edx:eax / r15d; | edx = edx:eax % r15d; 0x0040b785 mov r13d, eax | r13d = eax; 0x0040b788 dec r13d | r13d--; | label_0: 0x0040b78b imul r12d, r15d | r12d *= r15d; 0x0040b78f add r12d, esi | r12d += esi; 0x0040b792 cmp r12d, 0x1d4bf | | if (r12d > 0x1d4bf) { 0x0040b799 jg 0x40b94e | goto label_1; | } 0x0040b79f imul r13d, r15d | r13d *= r15d; 0x0040b7a3 add r13d, esi | r13d += esi; 0x0040b7a6 cmp r13d, 0xc | | if (r13d < 0xc) { 0x0040b7aa jl 0x40b94e | goto label_1; | } 0x0040b7b0 mov r14d, dword [rsp + 0x68] | r14d = *((rsp + 0x68)); 0x0040b7b5 movsxd rax, r12d | rax = (int64_t) r12d; 0x0040b7b8 imul rbp, rax, 0x2aaaaaab | rbp = rax * 0x2aaaaaab; 0x0040b7bf mov rax, rbp | rax = rbp; 0x0040b7c2 shr rax, 0x3f | rax >>= 0x3f; 0x0040b7c6 sar rbp, 0x21 | rbp >>= 0x21; 0x0040b7ca add ebp, eax | ebp += eax; 0x0040b7cc lea eax, [rbp*4] | eax = rbp*4; 0x0040b7d3 lea eax, [rax + rax*2] | eax = rax * 3; 0x0040b7d6 neg eax | eax = -eax; 0x0040b7d8 lea ebx, [r12 + rax + 1] | ebx = r12 + rax + 1; 0x0040b7dd mov dword [rsp + 0x10], edi | *((rsp + 0x10)) = edi; 0x0040b7e1 mov edi, ebp | 0x0040b7e3 mov esi, ebx | 0x0040b7e5 call 0x413b10 | BloombergLP::bdlt::PosixDateImpUtil::lastDayOfMonth(int,int) (ebp, ebx); 0x0040b7ea cmp ebx, 2 | 0x0040b7ed mov esi, ebx | esi = ebx; 0x0040b7ef mov r8d, r14d | r8d = r14d; 0x0040b7f2 mov edx, r14d | edx = r14d; 0x0040b7f5 mov edi, dword [rsp + 0x60] | edi = *((rsp + 0x60)); | if (ebx != 2) { 0x0040b7f9 cmovne edx, edi | edx = edi; | } 0x0040b7fc mov ecx, r13d | ecx = r13d; 0x0040b7ff mov ebx, 0xaaaaaaab | ebx = 0xaaaaaaab; 0x0040b804 imul rbx, rcx | rbx *= rcx; 0x0040b808 shr rbx, 0x23 | rbx >>= 0x23; 0x0040b80c lea ecx, [rbx*4] | ecx = rbx*4; 0x0040b813 lea ecx, [rcx + rcx*2] | ecx = rcx * 3; 0x0040b816 neg ecx | ecx = -ecx; 0x0040b818 lea r14d, [r13 + rcx + 1] | r14d = r13 + rcx + 1; 0x0040b81d cmp r14d, 2 | 0x0040b821 mov dword [rsp + 0xc], r15d | *((rsp + 0xc)) = r15d; 0x0040b826 mov r15d, r8d | r15d = r8d; | if (r14d != 2) { 0x0040b829 cmovne r15d, edi | r15d = edi; | } 0x0040b82d test r8d, r8d | | if (r8d == 0) { 0x0040b830 cmove edx, edi | edx = edi; | } | if (r8d == 0) { 0x0040b833 cmove r15d, edi | r15d = edi; | } 0x0040b837 cmp edx, eax | | if (edx >= eax) { 0x0040b839 cmovge edx, eax | edx = eax; | } 0x0040b83c mov edi, ebp | 0x0040b83e call 0x413e50 | eax = BloombergLP::bdlt::PosixDateImpUtil::ymdToSerial(int,int,int) (ebp, rsi, rdx, rcx); 0x0040b843 mov edi, eax | 0x0040b845 call 0x414250 | eax = BloombergLP::bdlt::PosixDateImpUtil::serialToDay(int) (eax, rsi); 0x0040b84a mov ebp, eax | 0x0040b84c mov edi, ebx | 0x0040b84e mov esi, r14d | 0x0040b851 call 0x413b10 | eax = BloombergLP::bdlt::PosixDateImpUtil::lastDayOfMonth(int,int) (ebx, r14d); 0x0040b856 cmp r15d, eax | | if (r15d >= eax) { 0x0040b859 cmovge r15d, eax | r15d = eax; | } 0x0040b85d mov edi, ebx | 0x0040b85f mov esi, r14d | 0x0040b862 mov edx, r15d | 0x0040b865 mov ebx, dword [rsp + 0xc] | ebx = *((rsp + 0xc)); 0x0040b869 call 0x413e50 | eax = BloombergLP::bdlt::PosixDateImpUtil::ymdToSerial(int,int,int) (ebx, r14d, r15d, rcx); 0x0040b86e mov edi, eax | 0x0040b870 call 0x414250 | eax = BloombergLP::bdlt::PosixDateImpUtil::serialToDay(int) (eax, rsi); 0x0040b875 xor ecx, ecx | ecx = 0; 0x0040b877 cmp ebp, dword [rsp + 0x1c] | 0x0040b87b mov ebp, 0 | | if (ebp < *((rsp + 0x1c))) { 0x0040b880 cmovl ebp, ebx | | } 0x0040b883 cmp r12d, dword [rsp + 0x14] | | if (r12d != *((rsp + 0x14))) { 0x0040b888 cmovne ebp, ecx | | } 0x0040b88b add ebp, r12d | ebp += r12d; 0x0040b88e mov r12d, dword [rsp + 0x68] | r12d = *((rsp + 0x68)); 0x0040b893 cmp eax, dword [rsp + 0x18] | 0x0040b897 mov eax, 0 | eax = 0; | if (eax > *((rsp + 0x18))) { 0x0040b89c cmovg eax, ebx | eax = ebx; | } 0x0040b89f cmp r13d, dword [rsp + 0x10] | | if (r13d != *((rsp + 0x10))) { 0x0040b8a4 cmovne eax, ecx | eax = ecx; | } 0x0040b8a7 cmp ebp, 0x1d4bf | | if (ebp > 0x1d4bf) { 0x0040b8ad jg 0x40b94e | goto label_1; | } 0x0040b8b3 sub r13d, eax | r13d -= eax; 0x0040b8b6 cmp r13d, 0xc | | if (r13d < 0xc) { 0x0040b8ba jl 0x40b94e | goto label_1; | } 0x0040b8c0 mov eax, r13d | eax = r13d; 0x0040b8c3 sub eax, ebp | eax -= ebp; 0x0040b8c5 cdq | edx:eax = (int64_t) eax; 0x0040b8c6 idiv ebx | eax = edx:eax / ebx; | edx = edx:eax % ebx; 0x0040b8c8 inc eax | eax++; 0x0040b8ca movsxd rsi, eax | rsi = (int64_t) eax; 0x0040b8cd mov rdi, qword [rsp + 0x20] | 0x0040b8d2 call 0x40c1a0 | bsl::vector>::reserve(unsigned long) (*((rsp + 0x20)), rsi); 0x0040b8d7 cmp r13d, ebp | | if (r13d < ebp) { 0x0040b8da jl 0x40b94e | goto label_1; | } 0x0040b8dc mov r14, rsp | r14 = rsp; 0x0040b8df nop | | do { 0x0040b8e0 movsxd rbp, ebp | rbp = (int64_t) ebp; 0x0040b8e3 imul rbx, rbp, 0x2aaaaaab | rbx = rbp * 0x2aaaaaab; 0x0040b8ea mov rax, rbx | rax = rbx; 0x0040b8ed shr rax, 0x3f | rax >>= 0x3f; 0x0040b8f1 sar rbx, 0x21 | rbx >>= 0x21; 0x0040b8f5 add ebx, eax | ebx += eax; 0x0040b8f7 lea eax, [rbx*4] | eax = rbx*4; 0x0040b8fe lea eax, [rax + rax*2] | eax = rax * 3; 0x0040b901 neg eax | eax = -eax; 0x0040b903 lea r15d, [rbp + rax + 1] | r15d = rbp + rax + 1; 0x0040b908 mov edi, ebx | 0x0040b90a mov esi, r15d | 0x0040b90d call 0x413b10 | eax = BloombergLP::bdlt::PosixDateImpUtil::lastDayOfMonth(int,int) (ebx, r15d); 0x0040b912 cmp r15d, 2 | 0x0040b916 mov edx, r12d | edx = r12d; 0x0040b919 mov ecx, dword [rsp + 0x60] | ecx = *((rsp + 0x60)); | if (r15d != 2) { 0x0040b91d cmovne edx, ecx | edx = ecx; | } 0x0040b920 test r12d, r12d | | if (r12d == 0) { 0x0040b923 cmove edx, ecx | edx = ecx; | } 0x0040b926 cmp edx, eax | | if (edx >= eax) { 0x0040b928 cmovge edx, eax | edx = eax; | } 0x0040b92b mov edi, ebx | 0x0040b92d mov esi, r15d | 0x0040b930 call 0x413e50 | eax = BloombergLP::bdlt::PosixDateImpUtil::ymdToSerial(int,int,int) (ebx, r15d, rdx, rcx); 0x0040b935 mov dword [rsp], eax | *(rsp) = eax; 0x0040b938 mov rdi, qword [rsp + 0x20] | 0x0040b93d mov rsi, r14 | 0x0040b940 call 0x40a680 | bsl::vector>::push_back(BloombergLP::bdlt::Date&&) (*((rsp + 0x20)), r14); 0x0040b945 add ebp, dword [rsp + 0xc] | ebp += *((rsp + 0xc)); 0x0040b949 cmp ebp, r13d | 0x0040b94c jle 0x40b8e0 | | } while (ebp <= r13d); | label_1: 0x0040b94e add rsp, 0x28 | 0x0040b952 pop rbx | 0x0040b953 pop r12 | 0x0040b955 pop r13 | 0x0040b957 pop r14 | 0x0040b959 pop r15 | 0x0040b95b pop rbp | 0x0040b95c ret | return rax; | }