; assembly | /* r2dec pseudo code output */ | /* bblb_schedulegenerationutil.t/none @ 0x41cb00 */ | #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 arg5, int64_t arg4, uint32_t arg3, int64_t arg2, uint32_t arg1, int64_t arg7, int64_t arg8) { | int64_t var_ch; | int64_t var_10h; | void ** s2; | int64_t var_20h; | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | xmm0 = arg7; | xmm1 = arg8; | /* BloombergLP::bdlc::PackedIntArrayImp::replace(unsigned long, BloombergLP::bdlc::PackedIntArrayImp const&, unsigned long, unsigned long) */ 0x0041cb00 push rbp | 0x0041cb01 push r15 | 0x0041cb03 push r14 | 0x0041cb05 push r13 | 0x0041cb07 push r12 | 0x0041cb09 push rbx | 0x0041cb0a sub rsp, 0x28 | 0x0041cb0e mov r14, r8 | r14 = r8; 0x0041cb11 mov r15, rcx | r15 = rcx; 0x0041cb14 mov r12, rsi | r12 = rsi; 0x0041cb17 mov rbx, rdi | rbx = rdi; 0x0041cb1a cmp rdi, rdx | | if (rdi != rdx) { 0x0041cb1d je 0x41cb5c | 0x0041cb1f mov r13, rdx | r13 = rdx; 0x0041cb22 mov ebp, dword [rbx + 0x10] | ebp = *((rbx + 0x10)); 0x0041cb25 cmp ebp, dword [rdx + 0x10] | | if (ebp != *((rdx + 0x10))) { 0x0041cb28 jne 0x41cb91 | goto label_0; | } 0x0041cb2a movsxd rax, ebp | rax = (int64_t) ebp; 0x0041cb2d imul r12, rax | r12 *= rax; 0x0041cb31 add r12, qword [rbx] | r12 += *(rbx); 0x0041cb34 imul r15, rax | r15 *= rax; 0x0041cb38 add r15, qword [r13] | r15 += *(r13); 0x0041cb3c imul r14, rax | r14 *= rax; 0x0041cb40 mov rdi, r12 | rdi = r12; 0x0041cb43 mov rsi, r15 | rsi = r15; 0x0041cb46 mov rdx, r14 | rdx = r14; 0x0041cb49 add rsp, 0x28 | 0x0041cb4d pop rbx | 0x0041cb4e pop r12 | 0x0041cb50 pop r13 | 0x0041cb52 pop r14 | 0x0041cb54 pop r15 | 0x0041cb56 pop rbp | 0x0041cb57 jmp 0x403b60 | void (*0x403b60)() (); | } 0x0041cb5c mov rax, qword [rbx] | rax = *(rbx); 0x0041cb5f movsxd rcx, dword [rbx + 0x10] | rcx = *((rbx + 0x10)); 0x0041cb63 imul r12, rcx | r12 *= rcx; 0x0041cb67 add r12, rax | r12 += rax; 0x0041cb6a imul r15, rcx | r15 *= rcx; 0x0041cb6e add r15, rax | r15 += rax; 0x0041cb71 imul r14, rcx | r14 *= rcx; 0x0041cb75 mov rdi, r12 | rdi = r12; 0x0041cb78 mov rsi, r15 | rsi = r15; 0x0041cb7b mov rdx, r14 | rdx = r14; 0x0041cb7e add rsp, 0x28 | 0x0041cb82 pop rbx | 0x0041cb83 pop r12 | 0x0041cb85 pop r13 | 0x0041cb87 pop r14 | 0x0041cb89 pop r15 | 0x0041cb8b pop rbp | 0x0041cb8c jmp 0x403910 | void (*0x403910)() (); | label_0: 0x0041cb91 mov eax, ebp | eax = ebp; | if (r15 < 0) { 0x0041cb93 jge 0x41cbab | 0x0041cb95 mov rdi, r13 | 0x0041cb98 mov rsi, r15 | 0x0041cb9b mov rdx, r14 | 0x0041cb9e call 0x41b900 | eax = BloombergLP::bdlc::PackedIntArrayImp::requiredBytesPerElement(unsigned long,unsigned long)const (r13, r15, r14); 0x0041cba3 mov ebp, dword [rbx + 0x10] | ebp = *((rbx + 0x10)); 0x0041cba6 cmp ebp, eax | | if (ebp < eax) { 0x0041cba8 cmovge eax, ebp | eax = ebp; | goto label_1; | } | } | label_1: 0x0041cbab movsxd rdx, eax | rdx = (int64_t) eax; 0x0041cbae mov r10, qword [rbx + 8] | r10 = *((rbx + 8)); 0x0041cbb2 mov rsi, qword [rbx + 0x18] | rsi = *((rbx + 0x18)); 0x0041cbb6 mov rcx, r10 | rcx = r10; 0x0041cbb9 mov qword [rsp + 0x10], rdx | *((rsp + 0x10)) = rdx; 0x0041cbbe imul rcx, rdx | rcx *= rdx; 0x0041cbc2 lea rdx, [r14 + r12] | rdx = r14 + r12; 0x0041cbc6 cmp rcx, rsi | 0x0041cbc9 mov dword [rsp + 0xc], eax | *((rsp + 0xc)) = eax; | if (rcx <= rsi) { 0x0041cbcd jbe 0x41cc5d | goto label_2; | } 0x0041cbd3 cmp rcx, 0x55555550 | 0x0041cbda mov qword [rsp + 0x18], rdx | *((rsp + 0x18)) = rdx; | if (rcx > 0x55555550) { 0x0041cbdf ja 0x41cdbf | goto label_3; | } 0x0041cbe5 nop word cs:[rax + rax] | 0x0041cbef nop | | do { 0x0041cbf0 lea rax, [rsi + 3] | rax = rsi + 3; 0x0041cbf4 shr rax, 1 | rax >>= 1; 0x0041cbf7 add rsi, rax | rsi += rax; 0x0041cbfa cmp rsi, rcx | 0x0041cbfd jb 0x41cbf0 | | } while (rsi < rcx); | do { 0x0041cbff mov rdi, qword [rbx + 0x20] | rdi = *((rbx + 0x20)); 0x0041cc03 mov rax, qword [rdi] | rax = *(rdi); 0x0041cc06 call qword [rax + 0x10] | uint64_t (*rax + 0x10)() (); 0x0041cc09 mov r10d, dword [rbx + 0x10] | r10d = *((rbx + 0x10)); 0x0041cc0d mov ecx, dword [rsp + 0xc] | ecx = *((rsp + 0xc)); 0x0041cc11 cmp r10d, ecx | | if (r10d == ecx) { 0x0041cc14 jne 0x41ccdd | 0x0041cc1a mov rbp, qword [rsp + 0x18] | rbp = *((rsp + 0x18)); 0x0041cc1f mov rsi, rbp | 0x0041cc22 mov r8, qword [rsp + 0x10] | r8 = *((rsp + 0x10)); 0x0041cc27 imul rsi, r8 | rsi *= r8; 0x0041cc2b lea rdi, [rax + rsi] | 0x0041cc2f add rsi, qword [rbx] | rsi += *(rbx); 0x0041cc32 mov rdx, qword [rbx + 8] | 0x0041cc36 sub rdx, rbp | rdx -= rbp; 0x0041cc39 imul rdx, r8 | rdx *= r8; 0x0041cc3d mov rbp, rax | 0x0041cc40 call 0x403b60 | memcpy (rax + rsi, *((rsp + 0x18)), *((rbx + 8))); 0x0041cc45 mov rsi, qword [rbx] | 0x0041cc48 movsxd rdx, dword [rbx + 0x10] | rdx = *((rbx + 0x10)); 0x0041cc4c imul rdx, r12 | rdx *= r12; 0x0041cc50 mov rdi, rbp | 0x0041cc53 call 0x403b60 | eax = memcpy (rbp, *(rbx), rdx); 0x0041cc58 jmp 0x41cd2c | goto label_4; | label_2: 0x0041cc5d cmp ebp, eax | | if (ebp != eax) { 0x0041cc5f je 0x41cca3 | 0x0041cc61 mov rsi, qword [rbx] | rsi = *(rbx); 0x0041cc64 sub r10, rdx | r10 -= rdx; 0x0041cc67 mov rdi, rbx | 0x0041cc6a mov ecx, eax | 0x0041cc6c mov r8, rsi | 0x0041cc6f mov r9, rdx | 0x0041cc72 push r10 | 0x0041cc74 push rbp | 0x0041cc75 call 0x41a170 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, *(rsi), rdx, eax, rsi, rdx); 0x0041cc7a add rsp, 0x10 | 0x0041cc7e mov rsi, qword [rbx] | rsi = *(rbx); 0x0041cc81 mov eax, dword [rbx + 0x10] | eax = *((rbx + 0x10)); 0x0041cc84 mov rdi, rbx | 0x0041cc87 xor edx, edx | 0x0041cc89 mov ecx, dword [rsp + 0xc] | 0x0041cc8d mov r8, rsi | 0x0041cc90 xor r9d, r9d | 0x0041cc93 push r12 | 0x0041cc95 push rax | 0x0041cc96 call 0x41a170 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, *(rsi), 0, *((rsp + 0xc)), rsi, 0); 0x0041cc9b mov eax, dword [rsp + 0x1c] | eax = *((rsp + 0x1c)); 0x0041cc9f add rsp, 0x10 | | } 0x0041cca3 mov ebp, dword [r13 + 0x10] | ebp = *((r13 + 0x10)); 0x0041cca7 mov rsi, qword [rbx] | rsi = *(rbx); 0x0041ccaa cmp eax, ebp | | if (eax == ebp) { 0x0041ccac jne 0x41cd60 | 0x0041ccb2 mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x0041ccb7 imul r12, rax | r12 *= rax; 0x0041ccbb add rsi, r12 | rsi += r12; 0x0041ccbe imul r15, rax | r15 *= rax; 0x0041ccc2 add r15, qword [r13] | r15 += *(r13); 0x0041ccc6 imul r14, rax | r14 *= rax; 0x0041ccca mov rdi, rsi | 0x0041cccd mov rsi, r15 | 0x0041ccd0 mov rdx, r14 | 0x0041ccd3 call 0x403b60 | rax = memcpy (rsi, r15, r14); 0x0041ccd8 jmp 0x41cda9 | | } else { 0x0041ccdd mov r8, qword [rbx] | r8 = *(rbx); 0x0041cce0 mov rbp, qword [rbx + 8] | rbp = *((rbx + 8)); 0x0041cce4 mov rdx, qword [rsp + 0x18] | 0x0041cce9 sub rbp, rdx | rbp -= rdx; 0x0041ccec mov rdi, rbx | 0x0041ccef mov rsi, rax | rsi = rax; 0x0041ccf2 mov qword [rsp + 0x20], rax | *((rsp + 0x20)) = rax; 0x0041ccf7 mov r9, rdx | 0x0041ccfa push rbp | 0x0041ccfb push r10 | 0x0041ccfd call 0x41a170 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, rsi, *((rsp + 0x18)), rcx, *(r8), rdx); 0x0041cd02 add rsp, 0x10 | 0x0041cd06 mov r8, qword [rbx] | r8 = *(rbx); 0x0041cd09 mov eax, dword [rbx + 0x10] | eax = *((rbx + 0x10)); 0x0041cd0c mov rdi, rbx | 0x0041cd0f mov rbp, qword [rsp + 0x20] | rbp = *((rsp + 0x20)); 0x0041cd14 mov rsi, rbp | 0x0041cd17 xor edx, edx | 0x0041cd19 mov ecx, dword [rsp + 0xc] | 0x0041cd1d xor r9d, r9d | 0x0041cd20 push r12 | 0x0041cd22 push rax | 0x0041cd23 call 0x41a170 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, *((rsp + 0x20)), 0, *((rsp + 0xc)), *(r8), 0); 0x0041cd28 add rsp, 0x10 | | label_4: 0x0041cd2c mov eax, dword [r13 + 0x10] | eax = *((r13 + 0x10)); 0x0041cd30 mov ecx, dword [rsp + 0xc] | ecx = *((rsp + 0xc)); 0x0041cd34 cmp ecx, eax | | if (ecx == eax) { 0x0041cd36 jne 0x41cd7d | 0x0041cd38 mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x0041cd3d imul r12, rax | r12 *= rax; 0x0041cd41 mov rdi, rbp | 0x0041cd44 add rdi, r12 | rdi += r12; 0x0041cd47 imul r15, rax | r15 *= rax; 0x0041cd4b add r15, qword [r13] | r15 += *(r13); 0x0041cd4f imul r14, rax | r14 *= rax; 0x0041cd53 mov rsi, r15 | 0x0041cd56 mov rdx, r14 | 0x0041cd59 call 0x403b60 | eax = memcpy (rbp, r15, r14); 0x0041cd5e jmp 0x41cd99 | | } else { 0x0041cd60 mov r8, qword [r13] | 0x0041cd64 mov rdi, rbx | 0x0041cd67 mov rdx, r12 | 0x0041cd6a mov ecx, eax | 0x0041cd6c mov r9, r15 | 0x0041cd6f push r14 | 0x0041cd71 push rbp | 0x0041cd72 call 0x41a170 | rax = BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, rsi, r12, eax, *(r13), r15); 0x0041cd77 add rsp, 0x10 | 0x0041cd7b jmp 0x41cda9 | goto label_5; | } 0x0041cd7d mov r8, qword [r13] | 0x0041cd81 mov rdi, rbx | 0x0041cd84 mov rsi, rbp | 0x0041cd87 mov rdx, r12 | 0x0041cd8a mov r9, r15 | 0x0041cd8d push r14 | 0x0041cd8f push rax | 0x0041cd90 call 0x41a170 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, rbp, r12, rcx, *(r13), r15); 0x0041cd95 add rsp, 0x10 | | } 0x0041cd99 mov rsi, qword [rbx] | rsi = *(rbx); 0x0041cd9c mov rdi, qword [rbx + 0x20] | rdi = *((rbx + 0x20)); 0x0041cda0 mov rax, qword [rdi] | rax = *(rdi); 0x0041cda3 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0041cda6 mov qword [rbx], rbp | *(rbx) = rbp; | } | label_5: 0x0041cda9 mov eax, dword [rsp + 0xc] | eax = *((rsp + 0xc)); 0x0041cdad mov dword [rbx + 0x10], eax | *((rbx + 0x10)) = eax; 0x0041cdb0 add rsp, 0x28 | 0x0041cdb4 pop rbx | 0x0041cdb5 pop r12 | 0x0041cdb7 pop r13 | 0x0041cdb9 pop r14 | 0x0041cdbb pop r15 | 0x0041cdbd pop rbp | 0x0041cdbe ret | return rax; | label_3: 0x0041cdbf mov rsi, rcx | rsi = rcx; 0x0041cdc2 jmp 0x41cbff | | } while (1); | }