; assembly | /* r2dec pseudo code output */ | /* bblb_schedulegenerationutil.t/none @ 0x41f4e0 */ | #include | ; (fcn) method.BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Unsigned_.append_BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Unsigned__const__unsigned_long__unsigned_long_ () | int64_t method_BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Unsigned_append_BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Unsigned_const_unsigned_long_unsigned_long_ (int64_t arg4, int64_t arg3, int64_t arg2, int64_t arg1) { | int64_t var_8h; | int64_t var_10h; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlc::PackedIntArrayImp::append(BloombergLP::bdlc::PackedIntArrayImp const&, unsigned long, unsigned long) */ 0x0041f4e0 push rbp | 0x0041f4e1 push r15 | 0x0041f4e3 push r14 | 0x0041f4e5 push r13 | 0x0041f4e7 push r12 | 0x0041f4e9 push rbx | 0x0041f4ea sub rsp, 0x18 | 0x0041f4ee mov r15, rcx | r15 = rcx; 0x0041f4f1 mov r14, rdx | r14 = rdx; 0x0041f4f4 mov r12, rsi | r12 = rsi; 0x0041f4f7 mov r13, rdi | r13 = rdi; 0x0041f4fa mov r10, qword [rdi + 8] | r10 = *((rdi + 8)); 0x0041f4fe lea r9, [r10 + rcx] | r9 = r10 + rcx; 0x0041f502 movsxd rax, dword [rdi + 0x10] | rax = *((rdi + 0x10)); 0x0041f506 mov ecx, dword [rsi + 0x10] | ecx = *((rsi + 0x10)); 0x0041f509 cmp eax, ecx | | if (eax >= ecx) { 0x0041f50b jge 0x41f55d | goto label_4; | } 0x0041f50d lea rdx, [r15 + r14] | rdx = r15 + r14; 0x0041f511 mov ebp, 1 | 0x0041f516 cmp ecx, 8 | | if (ecx == 8) { 0x0041f519 je 0x41f594 | goto label_5; | } 0x0041f51b cmp ecx, 4 | | if (ecx == 4) { 0x0041f51e je 0x41f608 | goto label_6; | } 0x0041f524 cmp ecx, 2 | | if (ecx != 2) { 0x0041f527 jne 0x41f64a | goto label_7; | } 0x0041f52d cmp rdx, r14 | | if (rdx <= r14) { 0x0041f530 jbe 0x41f64a | goto label_7; | } 0x0041f536 mov rcx, qword [r12] | rcx = *(r12); 0x0041f53a lea rcx, [rcx + r14*2] | rcx = rcx + r14*2; 0x0041f53e xor edx, edx | edx = 0; | do { 0x0041f540 movzx esi, word [rcx + rdx*2] | esi = *((rcx + rdx*2)); 0x0041f544 cmp esi, 0xff | | if (esi > 0xff) { 0x0041f54a ja 0x41f709 | goto label_8; | } 0x0041f550 inc rdx | rdx++; 0x0041f553 cmp r15, rdx | 0x0041f556 jne 0x41f540 | | } while (r15 != rdx); 0x0041f558 jmp 0x41f64a | goto label_7; | label_4: 0x0041f55d imul rax, r9 | rax *= r9; 0x0041f561 mov rcx, qword [r13 + 0x18] | rcx = *((r13 + 0x18)); 0x0041f565 cmp rax, rcx | | if (rax <= rcx) { 0x0041f568 jbe 0x41f798 | goto label_9; | } 0x0041f56e cmp rax, 0x55555550 | | if (rax > 0x55555550) { 0x0041f574 ja 0x41f805 | goto label_10; | } 0x0041f57a mov rbx, rcx | rbx = rcx; 0x0041f57d nop dword [rax] | | do { 0x0041f580 lea rdx, [rbx + 3] | rdx = rbx + 3; 0x0041f584 shr rdx, 1 | rdx >>= 1; 0x0041f587 add rbx, rdx | rbx += rdx; 0x0041f58a cmp rbx, rax | 0x0041f58d jb 0x41f580 | | } while (rbx < rax); 0x0041f58f jmp 0x41f74f | goto label_11; | label_5: 0x0041f594 cmp rdx, r14 | | if (rdx <= r14) { 0x0041f597 jbe 0x41f64a | goto label_7; | } 0x0041f59d mov rcx, qword [r12] | rcx = *(r12); 0x0041f5a1 lea r8, [rcx + r14*8] | r8 = rcx + r14*8; 0x0041f5a5 mov ebp, 1 | 0x0041f5aa xor edx, edx | edx = 0; 0x0041f5ac jmp 0x41f5bc | | while (edi >= ebp) { | label_0: 0x0041f5b0 inc rdx | rdx++; 0x0041f5b3 cmp r15, rdx | | if (r15 == rdx) { 0x0041f5b6 je 0x41f64a | goto label_7; | } 0x0041f5bc mov edi, ebp | edi = ebp; 0x0041f5be mov rsi, qword [r8 + rdx*8] | rsi = *((r8 + rdx*8)); 0x0041f5c2 xor ebp, ebp | ebp = 0; 0x0041f5c4 mov rbx, rsi | rbx = rsi; 0x0041f5c7 shr rbx, 0x20 | rbx >>= 0x20; 0x0041f5cb setne bpl | bpl = (rbx != 0) ? 1 : 0; 0x0041f5cf xor ecx, ecx | ecx = 0; 0x0041f5d1 cmp rsi, 0xff | 0x0041f5d8 seta cl | cl = (rsi > 0xff) ? 1 : 0; 0x0041f5db inc ecx | ecx++; 0x0041f5dd cmp rsi, 0xffff | 0x0041f5e4 lea ebp, [rbp*4 + 4] | ebp = rbp*4 + 4; | if (rsi <= 0xffff) { 0x0041f5eb cmovbe ebp, ecx | | } 0x0041f5ee cmp edi, ebp | | if (edi >= ebp) { 0x0041f5f0 cmovae ebp, edi | | } 0x0041f5f3 jae 0x41f5b0 | | } 0x0041f5f5 test rbx, rbx | | if (rbx == 0) { 0x0041f5f8 je 0x41f5b0 | goto label_0; | } 0x0041f5fa mov ebp, 8 | 0x0041f5ff cmp eax, ebp | | if (eax < ebp) { 0x0041f601 jl 0x41f652 | goto label_1; | } 0x0041f603 jmp 0x41f724 | goto label_12; | label_6: 0x0041f608 cmp rdx, r14 | | if (rdx <= r14) { 0x0041f60b jbe 0x41f64a | goto label_7; | } 0x0041f60d mov rcx, qword [r12] | rcx = *(r12); 0x0041f611 lea rcx, [rcx + r14*4] | rcx = rcx + r14*4; 0x0041f615 mov ebp, 1 | 0x0041f61a xor edx, edx | edx = 0; 0x0041f61c nop dword [rax] | | do { 0x0041f620 mov esi, dword [rcx + rdx*4] | esi = *((rcx + rdx*4)); 0x0041f623 cmp esi, 0xffff | | if (esi > 0xffff) { 0x0041f629 ja 0x41f717 | goto label_13; | } 0x0041f62f xor edi, edi | edi = 0; 0x0041f631 cmp esi, 0xff | 0x0041f637 seta dil | dil = (esi > 0xff) ? 1 : 0; 0x0041f63b inc edi | edi++; 0x0041f63d cmp ebp, edi | | if (ebp < edi) { 0x0041f63f cmovb ebp, edi | | } 0x0041f642 inc rdx | rdx++; 0x0041f645 cmp r15, rdx | 0x0041f648 jne 0x41f620 | | } while (r15 != rdx); | label_7: 0x0041f64a cmp eax, ebp | | if (eax >= ebp) { 0x0041f64c jge 0x41f724 | goto label_12; | } | label_1: 0x0041f652 mov ecx, ebp | ecx = ebp; 0x0041f654 imul rcx, r9 | rcx *= r9; 0x0041f658 mov rbx, qword [r13 + 0x18] | rbx = *((r13 + 0x18)); 0x0041f65c cmp rcx, rbx | | if (rcx <= rbx) { 0x0041f65f jbe 0x41f6dd | goto label_14; | } 0x0041f661 cmp rcx, 0x55555550 | 0x0041f668 mov qword [rsp + 8], r9 | *((rsp + 8)) = r9; | if (rcx > 0x55555550) { 0x0041f66d ja 0x41f812 | goto label_15; | } 0x0041f673 nop word cs:[rax + rax] | 0x0041f67d nop dword [rax] | | do { 0x0041f680 lea rax, [rbx + 3] | rax = rbx + 3; 0x0041f684 shr rax, 1 | rax >>= 1; 0x0041f687 add rbx, rax | rbx += rax; 0x0041f68a cmp rbx, rcx | 0x0041f68d jb 0x41f680 | | } while (rbx < rcx); | label_3: 0x0041f68f mov rax, qword [r13] | rax = *(r13); 0x0041f693 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0041f698 mov rdi, qword [r13 + 0x20] | rdi = *((r13 + 0x20)); 0x0041f69c mov rax, qword [rdi] | rax = *(rdi); 0x0041f69f mov rsi, rbx | rsi = rbx; 0x0041f6a2 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x0041f6a5 mov qword [r13], rax | *(r13) = rax; 0x0041f6a9 mov qword [r13 + 0x18], rbx | *((r13 + 0x18)) = rbx; 0x0041f6ad mov ebx, dword [r13 + 0x10] | ebx = *((r13 + 0x10)); 0x0041f6b1 mov dword [r13 + 0x10], ebp | *((r13 + 0x10)) = ebp; 0x0041f6b5 mov rdi, r13 | 0x0041f6b8 mov rsi, rax | 0x0041f6bb xor edx, edx | 0x0041f6bd mov ecx, ebp | 0x0041f6bf mov rbp, qword [rsp + 0x10] | rbp = *((rsp + 0x10)); 0x0041f6c4 mov r8, rbp | 0x0041f6c7 xor r9d, r9d | 0x0041f6ca push qword [r13 + 8] | 0x0041f6ce push rbx | 0x0041f6cf call 0x41d590 | rax = BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (r13, rax, 0, ebp, *((rsp + 0x10)), 0); 0x0041f6d4 add rsp, 0x10 | 0x0041f6d8 jmp 0x41f786 | goto label_16; | label_14: 0x0041f6dd mov dword [r13 + 0x10], ebp | *((r13 + 0x10)) = ebp; 0x0041f6e1 mov rsi, qword [r13] | rsi = *(r13); 0x0041f6e5 mov rdi, r13 | 0x0041f6e8 xor edx, edx | 0x0041f6ea mov ecx, ebp | 0x0041f6ec mov r8, rsi | 0x0041f6ef mov rbx, r9 | rbx = r9; 0x0041f6f2 xor r9d, r9d | 0x0041f6f5 push r10 | 0x0041f6f7 push rax | 0x0041f6f8 call 0x41d590 | eax = BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (r13, *(rsi), 0, ebp, rsi, 0); 0x0041f6fd mov r9, rbx | r9 = rbx; 0x0041f700 add rsp, 0x10 | 0x0041f704 jmp 0x41f798 | goto label_9; | label_8: 0x0041f709 mov ebp, 2 | 0x0041f70e cmp eax, ebp | | if (eax >= ebp) { 0x0041f710 jge 0x41f724 | goto label_12; | } 0x0041f712 jmp 0x41f652 | goto label_1; | label_13: 0x0041f717 mov ebp, 4 | 0x0041f71c cmp eax, ebp | | if (eax < ebp) { 0x0041f71e jl 0x41f652 | goto label_1; | } | label_12: 0x0041f724 imul rax, r9 | rax *= r9; 0x0041f728 mov rcx, qword [r13 + 0x18] | rcx = *((r13 + 0x18)); 0x0041f72c cmp rax, rcx | | if (rax <= rcx) { 0x0041f72f jbe 0x41f798 | goto label_9; | } 0x0041f731 cmp rax, 0x55555550 | | if (rax > 0x55555550) { 0x0041f737 ja 0x41f805 | goto label_10; | } 0x0041f73d mov rbx, rcx | rbx = rcx; | do { 0x0041f740 lea rdx, [rbx + 3] | rdx = rbx + 3; 0x0041f744 shr rdx, 1 | rdx >>= 1; 0x0041f747 add rbx, rdx | rbx += rdx; 0x0041f74a cmp rbx, rax | 0x0041f74d jb 0x41f740 | | } while (rbx < rax); | label_11: 0x0041f74f cmp rbx, rcx | | if (rbx <= rcx) { 0x0041f752 jbe 0x41f798 | goto label_9; | } | label_2: 0x0041f754 mov rbp, qword [r13] | rbp = *(r13); 0x0041f758 mov rdi, qword [r13 + 0x20] | rdi = *((r13 + 0x20)); 0x0041f75c mov rax, qword [rdi] | rax = *(rdi); 0x0041f75f mov rsi, rbx | rsi = rbx; 0x0041f762 mov qword [rsp + 8], r9 | *((rsp + 8)) = r9; 0x0041f767 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x0041f76a mov qword [r13], rax | *(r13) = rax; 0x0041f76e mov qword [r13 + 0x18], rbx | *((r13 + 0x18)) = rbx; 0x0041f772 movsxd rdx, dword [r13 + 0x10] | rdx = *((r13 + 0x10)); 0x0041f776 imul rdx, qword [r13 + 8] | rdx *= *((r13 + 8)); 0x0041f77b mov rdi, rax | 0x0041f77e mov rsi, rbp | 0x0041f781 call 0x403b60 | memcpy (rax, rbp, rdx); | label_16: 0x0041f786 mov rdi, qword [r13 + 0x20] | rdi = *((r13 + 0x20)); 0x0041f78a mov rax, qword [rdi] | rax = *(rdi); 0x0041f78d mov rsi, rbp | rsi = rbp; 0x0041f790 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0041f793 mov r9, qword [rsp + 8] | r9 = *((rsp + 8)); | do { | label_9: 0x0041f798 movsxd rcx, dword [r13 + 0x10] | rcx = *((r13 + 0x10)); 0x0041f79c cmp ecx, dword [r12 + 0x10] | | if (ecx == *((r12 + 0x10))) { 0x0041f7a1 jne 0x41f7d3 | 0x0041f7a3 mov rdi, qword [r13 + 8] | 0x0041f7a7 imul rdi, rcx | rdi *= rcx; 0x0041f7ab add rdi, qword [r13] | rdi += *(r13); 0x0041f7af imul r14, rcx | r14 *= rcx; 0x0041f7b3 add r14, qword [r12] | r14 += *(r12); 0x0041f7b7 imul r15, rcx | r15 *= rcx; 0x0041f7bb mov rsi, r14 | 0x0041f7be mov rdx, r15 | 0x0041f7c1 mov rbx, r9 | rbx = r9; 0x0041f7c4 call 0x403b60 | memcpy (*((r13 + 8)), r14, r15); 0x0041f7c9 mov qword [r13 + 8], rbx | *((r13 + 8)) = rbx; 0x0041f7cd add rsp, 0x18 | 0x0041f7d1 jmp 0x41f7fa | | } else { 0x0041f7d3 mov rsi, qword [r13] | rsi = *(r13); 0x0041f7d7 mov rdx, qword [r13 + 8] | 0x0041f7db mov qword [r13 + 8], r9 | *((r13 + 8)) = r9; 0x0041f7df mov r8, qword [r12] | 0x0041f7e3 mov eax, dword [r12 + 0x10] | eax = *((r12 + 0x10)); 0x0041f7e8 mov rdi, r13 | 0x0041f7eb mov r9, r14 | 0x0041f7ee push r15 | 0x0041f7f0 push rax | 0x0041f7f1 call 0x41d590 | rax = BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (r13, *(rsi), *((r13 + 8)), rcx, *(r12), r14); 0x0041f7f6 add rsp, 0x28 | | } 0x0041f7fa pop rbx | 0x0041f7fb pop r12 | 0x0041f7fd pop r13 | 0x0041f7ff pop r14 | 0x0041f801 pop r15 | 0x0041f803 pop rbp | 0x0041f804 ret | return rax; | label_10: 0x0041f805 mov rbx, rax | rbx = rax; 0x0041f808 cmp rbx, rcx | 0x0041f80b jbe 0x41f798 | | } while (rbx <= rcx); 0x0041f80d jmp 0x41f754 | goto label_2; | label_15: 0x0041f812 mov rbx, rcx | rbx = rcx; 0x0041f815 jmp 0x41f68f | goto label_3; | }