; assembly | /* r2dec pseudo code output */ | /* bblb_schedulegenerationutil.t/assume @ 0x41f630 */ | #include | ; (fcn) method.BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Unsigned_.insert_unsigned_long__BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Unsigned__const__unsigned_long__unsigned_long_ () | int64_t method_BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Unsigned_insert_unsigned_long_BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Unsigned_const_unsigned_long_unsigned_long_ (int64_t arg5, int64_t arg4, signed int64_t arg3, int64_t arg2, int64_t arg1, int64_t arg7, int64_t arg8) { | void * var_8h; | signed int64_t var_10h; | int64_t var_18h; | void ** s2; | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | xmm0 = arg7; | xmm1 = arg8; | /* BloombergLP::bdlc::PackedIntArrayImp::insert(unsigned long, BloombergLP::bdlc::PackedIntArrayImp const&, unsigned long, unsigned long) */ 0x0041f630 push rbp | 0x0041f631 push r15 | 0x0041f633 push r14 | 0x0041f635 push r13 | 0x0041f637 push r12 | 0x0041f639 push rbx | 0x0041f63a sub rsp, 0x28 | 0x0041f63e mov r14, r8 | r14 = r8; 0x0041f641 mov rbp, rcx | 0x0041f644 mov r12, rsi | r12 = rsi; 0x0041f647 mov r15, rdi | r15 = rdi; 0x0041f64a mov rax, qword [rdi + 8] | rax = *((rdi + 8)); 0x0041f64e add rax, r8 | rax += r8; 0x0041f651 mov qword [rsp + 0x18], rax | *((rsp + 0x18)) = rax; 0x0041f656 mov eax, dword [rdi + 0x10] | eax = *((rdi + 0x10)); 0x0041f659 mov r13d, eax | r13d = *((rdi + 0x10)); 0x0041f65c cmp eax, dword [rdx + 0x10] | | if (eax < *((rdx + 0x10))) { 0x0041f65f jge 0x41f683 | 0x0041f661 mov rdi, rdx | rdi = rdx; 0x0041f664 mov rsi, rbp | 0x0041f667 mov rbx, rdx | rbx = rdx; 0x0041f66a mov rdx, r14 | rdx = r14; 0x0041f66d call 0x41eae0 | eax = BloombergLP::bdlc::PackedIntArrayImp::requiredBytesPerElement(unsigned long,unsigned long)const (rdi, rbp); 0x0041f672 mov rdx, rbx | rdx = rbx; 0x0041f675 mov r13d, eax | r13d = eax; 0x0041f678 mov eax, dword [r15 + 0x10] | eax = *((r15 + 0x10)); 0x0041f67c cmp eax, r13d | | if (eax < r13d) { 0x0041f67f cmovge r13d, eax | r13d = eax; | goto label_0; | } | } | label_0: 0x0041f683 mov qword [rsp + 8], rbp | *((rsp + 8)) = rbp; 0x0041f688 movsxd rbx, r13d | rbx = (int64_t) r13d; 0x0041f68b mov rbp, qword [rsp + 0x18] | rbp = *((rsp + 0x18)); 0x0041f690 mov rcx, rbp | rcx = *((rsp + 0x18)); 0x0041f693 imul rcx, rbx | rcx *= rbx; 0x0041f697 mov rsi, qword [r15 + 0x18] | rsi = *((r15 + 0x18)); 0x0041f69b cmp rcx, rsi | | if (rcx <= rsi) { 0x0041f69e jbe 0x41f72f | goto label_1; | } 0x0041f6a4 cmp rcx, 0x55555550 | 0x0041f6ab mov qword [rsp + 0x20], rbx | *((rsp + 0x20)) = rbx; 0x0041f6b0 mov qword [rsp + 0x10], rdx | *((rsp + 0x10)) = rdx; | if (rcx > 0x55555550) { 0x0041f6b5 ja 0x41f9cc | goto label_2; | } 0x0041f6bb nop dword [rax + rax] | | do { 0x0041f6c0 lea rax, [rsi + 3] | rax = rsi + 3; 0x0041f6c4 shr rax, 1 | rax >>= 1; 0x0041f6c7 add rsi, rax | rsi += rax; 0x0041f6ca cmp rsi, rcx | 0x0041f6cd jb 0x41f6c0 | | } while (rsi < rcx); | do { 0x0041f6cf mov rdi, qword [r15 + 0x20] | rdi = *((r15 + 0x20)); 0x0041f6d3 mov rax, qword [rdi] | rax = *(rdi); 0x0041f6d6 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x0041f6d9 mov rbx, rax | rbx = rax; 0x0041f6dc mov eax, dword [r15 + 0x10] | eax = *((r15 + 0x10)); 0x0041f6e0 cmp eax, r13d | | if (eax == r13d) { 0x0041f6e3 jne 0x41f777 | 0x0041f6e9 lea rdi, [r14 + r12] | 0x0041f6ed mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x0041f6f2 imul rdi, rax | rdi *= rax; 0x0041f6f6 mov rsi, rax | 0x0041f6f9 imul rsi, r12 | rsi *= r12; 0x0041f6fd add rsi, qword [r15] | rsi += *(r15); 0x0041f700 add rdi, rbx | rdi += rbx; 0x0041f703 mov rdx, qword [r15 + 8] | 0x0041f707 sub rdx, r12 | rdx -= r12; 0x0041f70a imul rdx, rax | rdx *= rax; 0x0041f70e call 0x403b60 | memcpy (r14 + r12, rax, *((r15 + 8))); 0x0041f713 mov rsi, qword [r15] | 0x0041f716 movsxd rdx, dword [r15 + 0x10] | rdx = *((r15 + 0x10)); 0x0041f71a imul rdx, r12 | rdx *= r12; 0x0041f71e mov rdi, rbx | 0x0041f721 call 0x403b60 | eax = memcpy (rbx, *(r15), rdx); 0x0041f726 mov qword [r15 + 8], rbp | *((r15 + 8)) = rbp; 0x0041f72a jmp 0x41f7c4 | goto label_3; | label_1: 0x0041f72f cmp r15, rdx | | if (r15 != rdx) { 0x0041f732 je 0x41f833 | 0x0041f738 mov qword [rsp + 0x10], rdx | *((rsp + 0x10)) = rdx; 0x0041f73d cmp eax, r13d | | if (eax != r13d) { 0x0041f740 jne 0x41f8c7 | goto label_4; | } 0x0041f746 lea rdi, [r14 + r12] | 0x0041f74a imul rdi, rbx | rdi *= rbx; 0x0041f74e mov rax, qword [r15] | rax = *(r15); 0x0041f751 mov rdx, qword [r15 + 8] | 0x0041f755 add rdi, rax | rdi += rax; 0x0041f758 mov rsi, rbx | 0x0041f75b imul rsi, r12 | rsi *= r12; 0x0041f75f add rsi, rax | rsi += rax; 0x0041f762 sub rdx, r12 | rdx -= r12; 0x0041f765 imul rdx, rbx | rdx *= rbx; 0x0041f769 call 0x403910 | rax = memmove (r14 + r12, rbx, *((r15 + 8))); 0x0041f76e mov qword [r15 + 8], rbp | *((r15 + 8)) = rbp; 0x0041f772 jmp 0x41f914 | | } else { 0x0041f777 mov r8, qword [r15] | r8 = *(r15); 0x0041f77a mov rcx, rbp | rcx = rbp; 0x0041f77d mov rbp, qword [r15 + 8] | rbp = *((r15 + 8)); 0x0041f781 mov qword [r15 + 8], rcx | *((r15 + 8)) = rcx; 0x0041f785 lea rdx, [r14 + r12] | 0x0041f789 sub rbp, r12 | rbp -= r12; 0x0041f78c mov rdi, r15 | 0x0041f78f mov rsi, rbx | 0x0041f792 mov ecx, r13d | 0x0041f795 mov r9, r12 | 0x0041f798 push rbp | 0x0041f799 push rax | 0x0041f79a call 0x41d190 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (r15, rbx, r14 + r12, r13d, *(r8), r12); 0x0041f79f add rsp, 0x10 | 0x0041f7a3 mov r8, qword [r15] | r8 = *(r15); 0x0041f7a6 mov eax, dword [r15 + 0x10] | eax = *((r15 + 0x10)); 0x0041f7aa mov rdi, r15 | 0x0041f7ad mov rsi, rbx | 0x0041f7b0 xor edx, edx | 0x0041f7b2 mov ecx, r13d | 0x0041f7b5 xor r9d, r9d | 0x0041f7b8 push r12 | 0x0041f7ba push rax | 0x0041f7bb call 0x41d190 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (r15, rbx, 0, r13d, *(r8), 0); 0x0041f7c0 add rsp, 0x10 | | label_3: 0x0041f7c4 mov rcx, qword [rsp + 0x10] | rcx = *((rsp + 0x10)); 0x0041f7c9 mov eax, dword [rcx + 0x10] | eax = *((rcx + 0x10)); 0x0041f7cc cmp r13d, eax | | if (r13d == eax) { 0x0041f7cf jne 0x41f7fa | 0x0041f7d1 mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x0041f7d6 imul r12, rax | r12 *= rax; 0x0041f7da mov rdi, rbx | 0x0041f7dd add rdi, r12 | rdi += r12; 0x0041f7e0 mov rsi, qword [rsp + 8] | 0x0041f7e5 imul rsi, rax | rsi *= rax; 0x0041f7e9 add rsi, qword [rcx] | rsi += *(rcx); 0x0041f7ec imul r14, rax | r14 *= rax; 0x0041f7f0 mov rdx, r14 | 0x0041f7f3 call 0x403b60 | rax = memcpy (rbx, *((rsp + 8)), r14); 0x0041f7f8 jmp 0x41f81a | | } else { 0x0041f7fa mov r8, qword [rcx] | 0x0041f7fd mov rdi, r15 | 0x0041f800 mov rsi, rbx | 0x0041f803 mov rdx, r12 | 0x0041f806 mov ecx, r13d | 0x0041f809 mov r9, qword [rsp + 8] | 0x0041f80e push r14 | 0x0041f810 push rax | 0x0041f811 call 0x41d190 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (r15, rbx, r12, r13d, *(rcx), *((rsp + 8))); 0x0041f816 add rsp, 0x10 | | } 0x0041f81a mov rsi, qword [r15] | rsi = *(r15); 0x0041f81d mov rdi, qword [r15 + 0x20] | rdi = *((r15 + 0x20)); 0x0041f821 mov rax, qword [rdi] | rax = *(rdi); 0x0041f824 call qword [rax + 0x18] | eax = uint64_t (*rax + 0x18)() (); 0x0041f827 mov qword [r15], rbx | *(r15) = rbx; 0x0041f82a mov dword [r15 + 0x10], r13d | *((r15 + 0x10)) = r13d; 0x0041f82e jmp 0x41f9bd | goto label_5; | } 0x0041f833 lea rbx, [r14 + r12] | rbx = r14 + r12; 0x0041f837 movsxd rsi, eax | rsi = (int64_t) eax; 0x0041f83a mov rdi, rbx | 0x0041f83d imul rdi, rsi | rdi *= rsi; 0x0041f841 mov rax, qword [r15] | rax = *(r15); 0x0041f844 mov rdx, qword [r15 + 8] | 0x0041f848 add rdi, rax | rdi += rax; 0x0041f84b sub rdx, r12 | rdx -= r12; 0x0041f84e imul rdx, rsi | rdx *= rsi; 0x0041f852 imul rsi, r12 | rsi *= r12; 0x0041f856 add rsi, rax | rsi += rax; 0x0041f859 call 0x403910 | memmove (rbx, rsi, *((r15 + 8))); 0x0041f85e mov rsi, qword [rsp + 8] | rsi = *((rsp + 8)); 0x0041f863 lea rax, [r14 + rsi] | rax = r14 + rsi; 0x0041f867 cmp rax, r12 | | if (rax <= r12) { 0x0041f86a jbe 0x41f972 | goto label_6; | } 0x0041f870 mov rbp, r12 | 0x0041f873 sub rbp, rsi | rbp -= rsi; | if (rbp <= 0) { 0x0041f876 jbe 0x41f98d | goto label_7; | } 0x0041f87c sub r14, rbp | r14 -= rbp; 0x0041f87f mov rax, qword [r15] | rax = *(r15); 0x0041f882 movsxd rdx, dword [r15 + 0x10] | rdx = *((r15 + 0x10)); 0x0041f886 mov rdi, rdx | 0x0041f889 imul rdi, r12 | rdi *= r12; 0x0041f88d add rdi, rax | rdi += rax; 0x0041f890 imul rsi, rdx | rsi *= rdx; 0x0041f894 add rsi, rax | rsi += rax; 0x0041f897 imul rdx, rbp | rdx *= rbp; 0x0041f89b call 0x403b60 | memcpy (rdx, rsi, rdx); 0x0041f8a0 mov rax, qword [r15] | rax = *(r15); 0x0041f8a3 add rbp, r12 | rbp += r12; 0x0041f8a6 movsxd rcx, dword [r15 + 0x10] | rcx = *((r15 + 0x10)); 0x0041f8aa imul rbp, rcx | rbp *= rcx; 0x0041f8ae add rbp, rax | rbp += rax; 0x0041f8b1 imul rbx, rcx | rbx *= rcx; 0x0041f8b5 add rbx, rax | rbx += rax; 0x0041f8b8 imul r14, rcx | r14 *= rcx; 0x0041f8bc mov rsi, rbx | rsi = rbx; 0x0041f8bf mov r12, rbp | r12 = rbp; 0x0041f8c2 jmp 0x41f9a9 | goto label_8; | label_4: 0x0041f8c7 mov rsi, qword [r15] | rsi = *(r15); 0x0041f8ca mov rcx, rbp | rcx = rbp; 0x0041f8cd mov rbp, qword [r15 + 8] | rbp = *((r15 + 8)); 0x0041f8d1 mov qword [r15 + 8], rcx | *((r15 + 8)) = rcx; 0x0041f8d5 lea rdx, [r14 + r12] | 0x0041f8d9 sub rbp, r12 | rbp -= r12; 0x0041f8dc mov rdi, r15 | 0x0041f8df mov ecx, r13d | 0x0041f8e2 mov r8, rsi | 0x0041f8e5 mov r9, r12 | 0x0041f8e8 push rbp | 0x0041f8e9 push rax | 0x0041f8ea call 0x41d190 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (r15, *(rsi), r14 + r12, r13d, rsi, r12); 0x0041f8ef add rsp, 0x10 | 0x0041f8f3 mov rsi, qword [r15] | rsi = *(r15); 0x0041f8f6 mov eax, dword [r15 + 0x10] | eax = *((r15 + 0x10)); 0x0041f8fa mov rdi, r15 | 0x0041f8fd xor edx, edx | 0x0041f8ff mov ecx, r13d | 0x0041f902 mov r8, rsi | 0x0041f905 xor r9d, r9d | 0x0041f908 push r12 | 0x0041f90a push rax | 0x0041f90b call 0x41d190 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (r15, *(rsi), 0, r13d, rsi, 0); 0x0041f910 add rsp, 0x10 | | } 0x0041f914 mov rdx, qword [rsp + 0x10] | rdx = *((rsp + 0x10)); 0x0041f919 mov eax, dword [rdx + 0x10] | eax = *((rdx + 0x10)); 0x0041f91c mov rcx, qword [r15] | rcx = *(r15); 0x0041f91f cmp r13d, eax | | if (r13d == eax) { 0x0041f922 jne 0x41f94c | 0x0041f924 imul r12, rbx | r12 *= rbx; 0x0041f928 add rcx, r12 | rcx += r12; 0x0041f92b mov rsi, qword [rsp + 8] | 0x0041f930 imul rsi, rbx | rsi *= rbx; 0x0041f934 add rsi, qword [rdx] | rsi += *(rdx); 0x0041f937 imul r14, rbx | r14 *= rbx; 0x0041f93b mov rdi, rcx | 0x0041f93e mov rdx, r14 | 0x0041f941 call 0x403b60 | rax = memcpy (rcx, *((rsp + 8)), r14); 0x0041f946 mov dword [r15 + 0x10], r13d | *((r15 + 0x10)) = r13d; 0x0041f94a jmp 0x41f9bd | | } else { 0x0041f94c mov r8, qword [rdx] | 0x0041f94f mov rdi, r15 | 0x0041f952 mov rsi, rcx | 0x0041f955 mov rdx, r12 | 0x0041f958 mov ecx, r13d | 0x0041f95b mov r9, qword [rsp + 8] | 0x0041f960 push r14 | 0x0041f962 push rax | 0x0041f963 call 0x41d190 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (r15, rcx, r12, r13d, *(rdx), *((rsp + 8))); 0x0041f968 add rsp, 0x10 | 0x0041f96c mov dword [r15 + 0x10], r13d | *((r15 + 0x10)) = r13d; 0x0041f970 jmp 0x41f9bd | goto label_5; | label_6: 0x0041f972 mov rax, qword [r15] | rax = *(r15); 0x0041f975 movsxd rcx, dword [r15 + 0x10] | rcx = *((r15 + 0x10)); 0x0041f979 imul r12, rcx | r12 *= rcx; 0x0041f97d add r12, rax | r12 += rax; 0x0041f980 imul rsi, rcx | rsi *= rcx; 0x0041f984 add rsi, rax | rsi += rax; 0x0041f987 imul r14, rcx | r14 *= rcx; 0x0041f98b jmp 0x41f9ae | goto label_9; | label_7: 0x0041f98d mov rcx, qword [r15] | rcx = *(r15); 0x0041f990 movsxd rdx, dword [r15 + 0x10] | rdx = *((r15 + 0x10)); 0x0041f994 imul r12, rdx | r12 *= rdx; 0x0041f998 add r12, rcx | r12 += rcx; 0x0041f99b imul rax, rdx | rax *= rdx; 0x0041f99f add rax, rcx | rax += rcx; 0x0041f9a2 imul r14, rdx | r14 *= rdx; 0x0041f9a6 mov rsi, rax | | label_8: 0x0041f9a9 mov rbp, qword [rsp + 0x18] | rbp = *((rsp + 0x18)); | label_9: 0x0041f9ae mov rdi, r12 | 0x0041f9b1 mov rdx, r14 | 0x0041f9b4 call 0x403b60 | memcpy (r12, rax, r14); 0x0041f9b9 mov qword [r15 + 8], rbp | *((r15 + 8)) = rbp; | } | label_5: 0x0041f9bd add rsp, 0x28 | 0x0041f9c1 pop rbx | 0x0041f9c2 pop r12 | 0x0041f9c4 pop r13 | 0x0041f9c6 pop r14 | 0x0041f9c8 pop r15 | 0x0041f9ca pop rbp | 0x0041f9cb ret | return rax; | label_2: 0x0041f9cc mov rsi, rcx | rsi = rcx; 0x0041f9cf jmp 0x41f6cf | | } while (1); | }