; assembly | /* r2dec pseudo code output */ | /* bblb_schedulegenerationutil.t/assume @ 0x41c740 */ | #include | ; (fcn) method.BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Signed_.replace_unsigned_long__BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Signed__const__unsigned_long__unsigned_long_ () | int64_t method_BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Signed_replace_unsigned_long_BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Signed_const_unsigned_long_unsigned_long_ (int64_t arg_ch, int64_t arg_10h_2, void ** s2, int64_t arg_20h_3, int64_t arg5, int64_t arg4, uint32_t arg3, int64_t arg2, uint32_t arg1) { | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlc::PackedIntArrayImp::replace(unsigned long, BloombergLP::bdlc::PackedIntArrayImp const&, unsigned long, unsigned long) */ 0x0041c740 push rbp | 0x0041c741 push r15 | 0x0041c743 push r14 | 0x0041c745 push r13 | 0x0041c747 push r12 | 0x0041c749 push rbx | 0x0041c74a sub rsp, 0x28 | 0x0041c74e mov r14, r8 | r14 = r8; 0x0041c751 mov r15, rcx | r15 = rcx; 0x0041c754 mov r12, rsi | r12 = rsi; 0x0041c757 mov rbx, rdi | rbx = rdi; 0x0041c75a cmp rdi, rdx | | if (rdi != rdx) { 0x0041c75d je 0x41c79c | 0x0041c75f mov r13, rdx | r13 = rdx; 0x0041c762 mov ebp, dword [rbx + 0x10] | ebp = *((rbx + 0x10)); 0x0041c765 cmp ebp, dword [rdx + 0x10] | | if (ebp != *((rdx + 0x10))) { 0x0041c768 jne 0x41c7d1 | goto label_0; | } 0x0041c76a movsxd rax, ebp | rax = (int64_t) ebp; 0x0041c76d imul r12, rax | r12 *= rax; 0x0041c771 add r12, qword [rbx] | r12 += *(rbx); 0x0041c774 imul r15, rax | r15 *= rax; 0x0041c778 add r15, qword [r13] | r15 += *(r13); 0x0041c77c imul r14, rax | r14 *= rax; 0x0041c780 mov rdi, r12 | rdi = r12; 0x0041c783 mov rsi, r15 | rsi = r15; 0x0041c786 mov rdx, r14 | rdx = r14; 0x0041c789 add rsp, 0x28 | 0x0041c78d pop rbx | 0x0041c78e pop r12 | 0x0041c790 pop r13 | 0x0041c792 pop r14 | 0x0041c794 pop r15 | 0x0041c796 pop rbp | 0x0041c797 jmp 0x403b60 | void (*0x403b60)() (); | } 0x0041c79c mov rax, qword [rbx] | rax = *(rbx); 0x0041c79f movsxd rcx, dword [rbx + 0x10] | rcx = *((rbx + 0x10)); 0x0041c7a3 imul r12, rcx | r12 *= rcx; 0x0041c7a7 add r12, rax | r12 += rax; 0x0041c7aa imul r15, rcx | r15 *= rcx; 0x0041c7ae add r15, rax | r15 += rax; 0x0041c7b1 imul r14, rcx | r14 *= rcx; 0x0041c7b5 mov rdi, r12 | rdi = r12; 0x0041c7b8 mov rsi, r15 | rsi = r15; 0x0041c7bb mov rdx, r14 | rdx = r14; 0x0041c7be add rsp, 0x28 | 0x0041c7c2 pop rbx | 0x0041c7c3 pop r12 | 0x0041c7c5 pop r13 | 0x0041c7c7 pop r14 | 0x0041c7c9 pop r15 | 0x0041c7cb pop rbp | 0x0041c7cc jmp 0x403910 | void (*0x403910)() (); | if (r15 < 0) { | label_0: 0x0041c7d1 jge 0x41c7ef | 0x0041c7d3 mov rdi, r13 | 0x0041c7d6 mov rsi, r15 | 0x0041c7d9 mov rdx, r14 | rdx = r14; 0x0041c7dc call 0x41b500 | eax = BloombergLP::bdlc::PackedIntArrayImp::requiredBytesPerElement(unsigned long,unsigned long)const (r13, r15); 0x0041c7e1 mov ebp, dword [rbx + 0x10] | ebp = *((rbx + 0x10)); 0x0041c7e4 cmp ebp, eax | | if (ebp >= eax) { 0x0041c7e6 cmovge eax, ebp | eax = ebp; | } 0x0041c7e9 mov r10, qword [rbx + 8] | r10 = *((rbx + 8)); 0x0041c7ed jmp 0x41c7f5 | | } else { 0x0041c7ef mov r10, qword [rbx + 8] | r10 = *((rbx + 8)); 0x0041c7f3 mov eax, ebp | eax = ebp; | } 0x0041c7f5 movsxd rdx, eax | rdx = (int64_t) eax; 0x0041c7f8 mov rcx, r10 | rcx = r10; 0x0041c7fb mov qword [rsp + 0x10], rdx | *((rsp + 0x10)) = rdx; 0x0041c800 imul rcx, rdx | rcx *= rdx; 0x0041c804 lea rdx, [r14 + r12] | rdx = r14 + r12; 0x0041c808 mov rsi, qword [rbx + 0x18] | rsi = *((rbx + 0x18)); 0x0041c80c cmp rcx, rsi | 0x0041c80f mov dword [rsp + 0xc], eax | *((rsp + 0xc)) = eax; | if (rcx <= rsi) { 0x0041c813 jbe 0x41c89d | goto label_1; | } 0x0041c819 cmp rcx, 0x55555550 | 0x0041c820 mov qword [rsp + 0x18], rdx | *((rsp + 0x18)) = rdx; | if (rcx > 0x55555550) { 0x0041c825 ja 0x41c9ff | goto label_2; | } 0x0041c82b nop dword [rax + rax] | | do { 0x0041c830 lea rax, [rsi + 3] | rax = rsi + 3; 0x0041c834 shr rax, 1 | rax >>= 1; 0x0041c837 add rsi, rax | rsi += rax; 0x0041c83a cmp rsi, rcx | 0x0041c83d jb 0x41c830 | | } while (rsi < rcx); | do { 0x0041c83f mov rdi, qword [rbx + 0x20] | rdi = *((rbx + 0x20)); 0x0041c843 mov rax, qword [rdi] | rax = *(rdi); 0x0041c846 call qword [rax + 0x10] | uint64_t (*rax + 0x10)() (); 0x0041c849 mov r10d, dword [rbx + 0x10] | r10d = *((rbx + 0x10)); 0x0041c84d mov ecx, dword [rsp + 0xc] | ecx = *((rsp + 0xc)); 0x0041c851 cmp r10d, ecx | | if (r10d == ecx) { 0x0041c854 jne 0x41c91d | 0x0041c85a mov rbp, qword [rsp + 0x18] | rbp = *((rsp + 0x18)); 0x0041c85f mov rsi, rbp | 0x0041c862 mov r8, qword [rsp + 0x10] | r8 = *((rsp + 0x10)); 0x0041c867 imul rsi, r8 | rsi *= r8; 0x0041c86b lea rdi, [rax + rsi] | 0x0041c86f add rsi, qword [rbx] | rsi += *(rbx); 0x0041c872 mov rdx, qword [rbx + 8] | 0x0041c876 sub rdx, rbp | rdx -= rbp; 0x0041c879 imul rdx, r8 | rdx *= r8; 0x0041c87d mov rbp, rax | 0x0041c880 call 0x403b60 | memcpy (rax + rsi, *((rsp + 0x18)), *((rbx + 8))); 0x0041c885 mov rsi, qword [rbx] | 0x0041c888 movsxd rdx, dword [rbx + 0x10] | rdx = *((rbx + 0x10)); 0x0041c88c imul rdx, r12 | rdx *= r12; 0x0041c890 mov rdi, rbp | 0x0041c893 call 0x403b60 | eax = memcpy (rbp, *(rbx), rdx); 0x0041c898 jmp 0x41c96c | goto label_3; | label_1: 0x0041c89d cmp ebp, eax | | if (ebp != eax) { 0x0041c89f je 0x41c8e3 | 0x0041c8a1 mov rsi, qword [rbx] | rsi = *(rbx); 0x0041c8a4 sub r10, rdx | r10 -= rdx; 0x0041c8a7 mov rdi, rbx | 0x0041c8aa mov ecx, eax | 0x0041c8ac mov r8, rsi | 0x0041c8af mov r9, rdx | 0x0041c8b2 push r10 | 0x0041c8b4 push rbp | 0x0041c8b5 call 0x419d30 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, *(rsi), rdx, eax, rsi, rdx); 0x0041c8ba add rsp, 0x10 | 0x0041c8be mov rsi, qword [rbx] | rsi = *(rbx); 0x0041c8c1 mov eax, dword [rbx + 0x10] | eax = *((rbx + 0x10)); 0x0041c8c4 mov rdi, rbx | 0x0041c8c7 xor edx, edx | 0x0041c8c9 mov ecx, dword [rsp + 0xc] | 0x0041c8cd mov r8, rsi | 0x0041c8d0 xor r9d, r9d | 0x0041c8d3 push r12 | 0x0041c8d5 push rax | 0x0041c8d6 call 0x419d30 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, *(rsi), 0, *((rsp + 0xc)), rsi, 0); 0x0041c8db mov eax, dword [rsp + 0x1c] | eax = *((rsp + 0x1c)); 0x0041c8df add rsp, 0x10 | | } 0x0041c8e3 mov ebp, dword [r13 + 0x10] | ebp = *((r13 + 0x10)); 0x0041c8e7 mov rsi, qword [rbx] | rsi = *(rbx); 0x0041c8ea cmp eax, ebp | | if (eax == ebp) { 0x0041c8ec jne 0x41c9a0 | 0x0041c8f2 mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x0041c8f7 imul r12, rax | r12 *= rax; 0x0041c8fb add rsi, r12 | rsi += r12; 0x0041c8fe imul r15, rax | r15 *= rax; 0x0041c902 add r15, qword [r13] | r15 += *(r13); 0x0041c906 imul r14, rax | r14 *= rax; 0x0041c90a mov rdi, rsi | 0x0041c90d mov rsi, r15 | 0x0041c910 mov rdx, r14 | 0x0041c913 call 0x403b60 | rax = memcpy (rsi, r15, r14); 0x0041c918 jmp 0x41c9e9 | | } else { 0x0041c91d mov r8, qword [rbx] | r8 = *(rbx); 0x0041c920 mov rbp, qword [rbx + 8] | rbp = *((rbx + 8)); 0x0041c924 mov rdx, qword [rsp + 0x18] | 0x0041c929 sub rbp, rdx | rbp -= rdx; 0x0041c92c mov rdi, rbx | 0x0041c92f mov rsi, rax | rsi = rax; 0x0041c932 mov qword [rsp + 0x20], rax | *((rsp + 0x20)) = rax; 0x0041c937 mov r9, rdx | 0x0041c93a push rbp | 0x0041c93b push r10 | 0x0041c93d call 0x419d30 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, rsi, *((rsp + 0x18)), rcx, *(r8), rdx); 0x0041c942 add rsp, 0x10 | 0x0041c946 mov r8, qword [rbx] | r8 = *(rbx); 0x0041c949 mov eax, dword [rbx + 0x10] | eax = *((rbx + 0x10)); 0x0041c94c mov rdi, rbx | 0x0041c94f mov rbp, qword [rsp + 0x20] | rbp = *((rsp + 0x20)); 0x0041c954 mov rsi, rbp | 0x0041c957 xor edx, edx | 0x0041c959 mov ecx, dword [rsp + 0xc] | 0x0041c95d xor r9d, r9d | 0x0041c960 push r12 | 0x0041c962 push rax | 0x0041c963 call 0x419d30 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, *((rsp + 0x20)), 0, *((rsp + 0xc)), *(r8), 0); 0x0041c968 add rsp, 0x10 | | label_3: 0x0041c96c mov eax, dword [r13 + 0x10] | eax = *((r13 + 0x10)); 0x0041c970 mov ecx, dword [rsp + 0xc] | ecx = *((rsp + 0xc)); 0x0041c974 cmp ecx, eax | | if (ecx == eax) { 0x0041c976 jne 0x41c9bd | 0x0041c978 mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x0041c97d imul r12, rax | r12 *= rax; 0x0041c981 mov rdi, rbp | 0x0041c984 add rdi, r12 | rdi += r12; 0x0041c987 imul r15, rax | r15 *= rax; 0x0041c98b add r15, qword [r13] | r15 += *(r13); 0x0041c98f imul r14, rax | r14 *= rax; 0x0041c993 mov rsi, r15 | 0x0041c996 mov rdx, r14 | 0x0041c999 call 0x403b60 | eax = memcpy (rbp, r15, r14); 0x0041c99e jmp 0x41c9d9 | | } else { 0x0041c9a0 mov r8, qword [r13] | 0x0041c9a4 mov rdi, rbx | 0x0041c9a7 mov rdx, r12 | 0x0041c9aa mov ecx, eax | 0x0041c9ac mov r9, r15 | 0x0041c9af push r14 | 0x0041c9b1 push rbp | 0x0041c9b2 call 0x419d30 | rax = BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, rsi, r12, eax, *(r13), r15); 0x0041c9b7 add rsp, 0x10 | 0x0041c9bb jmp 0x41c9e9 | goto label_4; | } 0x0041c9bd mov r8, qword [r13] | 0x0041c9c1 mov rdi, rbx | 0x0041c9c4 mov rsi, rbp | 0x0041c9c7 mov rdx, r12 | 0x0041c9ca mov r9, r15 | 0x0041c9cd push r14 | 0x0041c9cf push rax | 0x0041c9d0 call 0x419d30 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, rbp, r12, rcx, *(r13), r15); 0x0041c9d5 add rsp, 0x10 | | } 0x0041c9d9 mov rsi, qword [rbx] | rsi = *(rbx); 0x0041c9dc mov rdi, qword [rbx + 0x20] | rdi = *((rbx + 0x20)); 0x0041c9e0 mov rax, qword [rdi] | rax = *(rdi); 0x0041c9e3 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0041c9e6 mov qword [rbx], rbp | *(rbx) = rbp; | } | label_4: 0x0041c9e9 mov eax, dword [rsp + 0xc] | eax = *((rsp + 0xc)); 0x0041c9ed mov dword [rbx + 0x10], eax | *((rbx + 0x10)) = eax; 0x0041c9f0 add rsp, 0x28 | 0x0041c9f4 pop rbx | 0x0041c9f5 pop r12 | 0x0041c9f7 pop r13 | 0x0041c9f9 pop r14 | 0x0041c9fb pop r15 | 0x0041c9fd pop rbp | 0x0041c9fe ret | return rax; | label_2: 0x0041c9ff mov rsi, rcx | rsi = rcx; 0x0041ca02 jmp 0x41c83f | | } while (1); | }