; assembly | /* r2dec pseudo code output */ | /* bblb_schedulegenerationutil.t/assume @ 0x41fc00 */ | #include | ; (fcn) method.BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Unsigned_.replace_unsigned_long__BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Unsigned__const__unsigned_long__unsigned_long_ () | int64_t method_BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Unsigned_replace_unsigned_long_BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Unsigned_const_unsigned_long_unsigned_long_ (int64_t arg_ch_2, int64_t arg_10h_3, void ** s2, int64_t arg_20h_5, int64_t arg5, int64_t arg4, uint32_t arg3, int64_t arg2, uint32_t arg1, int64_t arg7, int64_t arg8) { | 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) */ 0x0041fc00 push rbp | 0x0041fc01 push r15 | 0x0041fc03 push r14 | 0x0041fc05 push r13 | 0x0041fc07 push r12 | 0x0041fc09 push rbx | 0x0041fc0a sub rsp, 0x28 | 0x0041fc0e mov r14, r8 | r14 = r8; 0x0041fc11 mov r15, rcx | r15 = rcx; 0x0041fc14 mov r12, rsi | r12 = rsi; 0x0041fc17 mov rbx, rdi | rbx = rdi; 0x0041fc1a cmp rdi, rdx | | if (rdi != rdx) { 0x0041fc1d je 0x41fc5c | 0x0041fc1f mov r13, rdx | r13 = rdx; 0x0041fc22 mov ebp, dword [rbx + 0x10] | ebp = *((rbx + 0x10)); 0x0041fc25 cmp ebp, dword [rdx + 0x10] | | if (ebp != *((rdx + 0x10))) { 0x0041fc28 jne 0x41fc91 | goto label_0; | } 0x0041fc2a movsxd rax, ebp | rax = (int64_t) ebp; 0x0041fc2d imul r12, rax | r12 *= rax; 0x0041fc31 add r12, qword [rbx] | r12 += *(rbx); 0x0041fc34 imul r15, rax | r15 *= rax; 0x0041fc38 add r15, qword [r13] | r15 += *(r13); 0x0041fc3c imul r14, rax | r14 *= rax; 0x0041fc40 mov rdi, r12 | rdi = r12; 0x0041fc43 mov rsi, r15 | rsi = r15; 0x0041fc46 mov rdx, r14 | rdx = r14; 0x0041fc49 add rsp, 0x28 | 0x0041fc4d pop rbx | 0x0041fc4e pop r12 | 0x0041fc50 pop r13 | 0x0041fc52 pop r14 | 0x0041fc54 pop r15 | 0x0041fc56 pop rbp | 0x0041fc57 jmp 0x403b60 | void (*0x403b60)() (); | } 0x0041fc5c mov rax, qword [rbx] | rax = *(rbx); 0x0041fc5f movsxd rcx, dword [rbx + 0x10] | rcx = *((rbx + 0x10)); 0x0041fc63 imul r12, rcx | r12 *= rcx; 0x0041fc67 add r12, rax | r12 += rax; 0x0041fc6a imul r15, rcx | r15 *= rcx; 0x0041fc6e add r15, rax | r15 += rax; 0x0041fc71 imul r14, rcx | r14 *= rcx; 0x0041fc75 mov rdi, r12 | rdi = r12; 0x0041fc78 mov rsi, r15 | rsi = r15; 0x0041fc7b mov rdx, r14 | rdx = r14; 0x0041fc7e add rsp, 0x28 | 0x0041fc82 pop rbx | 0x0041fc83 pop r12 | 0x0041fc85 pop r13 | 0x0041fc87 pop r14 | 0x0041fc89 pop r15 | 0x0041fc8b pop rbp | 0x0041fc8c jmp 0x403910 | void (*0x403910)() (); | if (r15 < 0) { | label_0: 0x0041fc91 jge 0x41fcaf | 0x0041fc93 mov rdi, r13 | 0x0041fc96 mov rsi, r15 | 0x0041fc99 mov rdx, r14 | rdx = r14; 0x0041fc9c call 0x41eae0 | eax = BloombergLP::bdlc::PackedIntArrayImp::requiredBytesPerElement(unsigned long,unsigned long)const (r13, r15); 0x0041fca1 mov ebp, dword [rbx + 0x10] | ebp = *((rbx + 0x10)); 0x0041fca4 cmp ebp, eax | | if (ebp >= eax) { 0x0041fca6 cmovge eax, ebp | eax = ebp; | } 0x0041fca9 mov r10, qword [rbx + 8] | r10 = *((rbx + 8)); 0x0041fcad jmp 0x41fcb5 | | } else { 0x0041fcaf mov r10, qword [rbx + 8] | r10 = *((rbx + 8)); 0x0041fcb3 mov eax, ebp | eax = ebp; | } 0x0041fcb5 movsxd rdx, eax | rdx = (int64_t) eax; 0x0041fcb8 mov rcx, r10 | rcx = r10; 0x0041fcbb mov qword [rsp + 0x10], rdx | *((rsp + 0x10)) = rdx; 0x0041fcc0 imul rcx, rdx | rcx *= rdx; 0x0041fcc4 lea rdx, [r14 + r12] | rdx = r14 + r12; 0x0041fcc8 mov rsi, qword [rbx + 0x18] | rsi = *((rbx + 0x18)); 0x0041fccc cmp rcx, rsi | 0x0041fccf mov dword [rsp + 0xc], eax | *((rsp + 0xc)) = eax; | if (rcx <= rsi) { 0x0041fcd3 jbe 0x41fd5d | goto label_1; | } 0x0041fcd9 cmp rcx, 0x55555550 | 0x0041fce0 mov qword [rsp + 0x18], rdx | *((rsp + 0x18)) = rdx; | if (rcx > 0x55555550) { 0x0041fce5 ja 0x41febf | goto label_2; | } 0x0041fceb nop dword [rax + rax] | | do { 0x0041fcf0 lea rax, [rsi + 3] | rax = rsi + 3; 0x0041fcf4 shr rax, 1 | rax >>= 1; 0x0041fcf7 add rsi, rax | rsi += rax; 0x0041fcfa cmp rsi, rcx | 0x0041fcfd jb 0x41fcf0 | | } while (rsi < rcx); | do { 0x0041fcff mov rdi, qword [rbx + 0x20] | rdi = *((rbx + 0x20)); 0x0041fd03 mov rax, qword [rdi] | rax = *(rdi); 0x0041fd06 call qword [rax + 0x10] | uint64_t (*rax + 0x10)() (); 0x0041fd09 mov r10d, dword [rbx + 0x10] | r10d = *((rbx + 0x10)); 0x0041fd0d mov ecx, dword [rsp + 0xc] | ecx = *((rsp + 0xc)); 0x0041fd11 cmp r10d, ecx | | if (r10d == ecx) { 0x0041fd14 jne 0x41fddd | 0x0041fd1a mov rbp, qword [rsp + 0x18] | rbp = *((rsp + 0x18)); 0x0041fd1f mov rsi, rbp | 0x0041fd22 mov r8, qword [rsp + 0x10] | r8 = *((rsp + 0x10)); 0x0041fd27 imul rsi, r8 | rsi *= r8; 0x0041fd2b lea rdi, [rax + rsi] | 0x0041fd2f add rsi, qword [rbx] | rsi += *(rbx); 0x0041fd32 mov rdx, qword [rbx + 8] | 0x0041fd36 sub rdx, rbp | rdx -= rbp; 0x0041fd39 imul rdx, r8 | rdx *= r8; 0x0041fd3d mov rbp, rax | 0x0041fd40 call 0x403b60 | memcpy (rax + rsi, *((rsp + 0x18)), *((rbx + 8))); 0x0041fd45 mov rsi, qword [rbx] | 0x0041fd48 movsxd rdx, dword [rbx + 0x10] | rdx = *((rbx + 0x10)); 0x0041fd4c imul rdx, r12 | rdx *= r12; 0x0041fd50 mov rdi, rbp | 0x0041fd53 call 0x403b60 | eax = memcpy (rbp, *(rbx), rdx); 0x0041fd58 jmp 0x41fe2c | goto label_3; | label_1: 0x0041fd5d cmp ebp, eax | | if (ebp != eax) { 0x0041fd5f je 0x41fda3 | 0x0041fd61 mov rsi, qword [rbx] | rsi = *(rbx); 0x0041fd64 sub r10, rdx | r10 -= rdx; 0x0041fd67 mov rdi, rbx | 0x0041fd6a mov ecx, eax | 0x0041fd6c mov r8, rsi | 0x0041fd6f mov r9, rdx | 0x0041fd72 push r10 | 0x0041fd74 push rbp | 0x0041fd75 call 0x41d190 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, *(rsi), rdx, eax, rsi, rdx); 0x0041fd7a add rsp, 0x10 | 0x0041fd7e mov rsi, qword [rbx] | rsi = *(rbx); 0x0041fd81 mov eax, dword [rbx + 0x10] | eax = *((rbx + 0x10)); 0x0041fd84 mov rdi, rbx | 0x0041fd87 xor edx, edx | 0x0041fd89 mov ecx, dword [rsp + 0xc] | 0x0041fd8d mov r8, rsi | 0x0041fd90 xor r9d, r9d | 0x0041fd93 push r12 | 0x0041fd95 push rax | 0x0041fd96 call 0x41d190 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, *(rsi), 0, *((rsp + 0xc)), rsi, 0); 0x0041fd9b mov eax, dword [rsp + 0x1c] | eax = *((rsp + 0x1c)); 0x0041fd9f add rsp, 0x10 | | } 0x0041fda3 mov ebp, dword [r13 + 0x10] | ebp = *((r13 + 0x10)); 0x0041fda7 mov rsi, qword [rbx] | rsi = *(rbx); 0x0041fdaa cmp eax, ebp | | if (eax == ebp) { 0x0041fdac jne 0x41fe60 | 0x0041fdb2 mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x0041fdb7 imul r12, rax | r12 *= rax; 0x0041fdbb add rsi, r12 | rsi += r12; 0x0041fdbe imul r15, rax | r15 *= rax; 0x0041fdc2 add r15, qword [r13] | r15 += *(r13); 0x0041fdc6 imul r14, rax | r14 *= rax; 0x0041fdca mov rdi, rsi | 0x0041fdcd mov rsi, r15 | 0x0041fdd0 mov rdx, r14 | 0x0041fdd3 call 0x403b60 | rax = memcpy (rsi, r15, r14); 0x0041fdd8 jmp 0x41fea9 | | } else { 0x0041fddd mov r8, qword [rbx] | r8 = *(rbx); 0x0041fde0 mov rbp, qword [rbx + 8] | rbp = *((rbx + 8)); 0x0041fde4 mov rdx, qword [rsp + 0x18] | 0x0041fde9 sub rbp, rdx | rbp -= rdx; 0x0041fdec mov rdi, rbx | 0x0041fdef mov rsi, rax | rsi = rax; 0x0041fdf2 mov qword [rsp + 0x20], rax | *((rsp + 0x20)) = rax; 0x0041fdf7 mov r9, rdx | 0x0041fdfa push rbp | 0x0041fdfb push r10 | 0x0041fdfd call 0x41d190 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, rsi, *((rsp + 0x18)), rcx, *(r8), rdx); 0x0041fe02 add rsp, 0x10 | 0x0041fe06 mov r8, qword [rbx] | r8 = *(rbx); 0x0041fe09 mov eax, dword [rbx + 0x10] | eax = *((rbx + 0x10)); 0x0041fe0c mov rdi, rbx | 0x0041fe0f mov rbp, qword [rsp + 0x20] | rbp = *((rsp + 0x20)); 0x0041fe14 mov rsi, rbp | 0x0041fe17 xor edx, edx | 0x0041fe19 mov ecx, dword [rsp + 0xc] | 0x0041fe1d xor r9d, r9d | 0x0041fe20 push r12 | 0x0041fe22 push rax | 0x0041fe23 call 0x41d190 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, *((rsp + 0x20)), 0, *((rsp + 0xc)), *(r8), 0); 0x0041fe28 add rsp, 0x10 | | label_3: 0x0041fe2c mov eax, dword [r13 + 0x10] | eax = *((r13 + 0x10)); 0x0041fe30 mov ecx, dword [rsp + 0xc] | ecx = *((rsp + 0xc)); 0x0041fe34 cmp ecx, eax | | if (ecx == eax) { 0x0041fe36 jne 0x41fe7d | 0x0041fe38 mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x0041fe3d imul r12, rax | r12 *= rax; 0x0041fe41 mov rdi, rbp | 0x0041fe44 add rdi, r12 | rdi += r12; 0x0041fe47 imul r15, rax | r15 *= rax; 0x0041fe4b add r15, qword [r13] | r15 += *(r13); 0x0041fe4f imul r14, rax | r14 *= rax; 0x0041fe53 mov rsi, r15 | 0x0041fe56 mov rdx, r14 | 0x0041fe59 call 0x403b60 | eax = memcpy (rbp, r15, r14); 0x0041fe5e jmp 0x41fe99 | | } else { 0x0041fe60 mov r8, qword [r13] | 0x0041fe64 mov rdi, rbx | 0x0041fe67 mov rdx, r12 | 0x0041fe6a mov ecx, eax | 0x0041fe6c mov r9, r15 | 0x0041fe6f push r14 | 0x0041fe71 push rbp | 0x0041fe72 call 0x41d190 | rax = BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, rsi, r12, eax, *(r13), r15); 0x0041fe77 add rsp, 0x10 | 0x0041fe7b jmp 0x41fea9 | goto label_4; | } 0x0041fe7d mov r8, qword [r13] | 0x0041fe81 mov rdi, rbx | 0x0041fe84 mov rsi, rbp | 0x0041fe87 mov rdx, r12 | 0x0041fe8a mov r9, r15 | 0x0041fe8d push r14 | 0x0041fe8f push rax | 0x0041fe90 call 0x41d190 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, rbp, r12, rcx, *(r13), r15); 0x0041fe95 add rsp, 0x10 | | } 0x0041fe99 mov rsi, qword [rbx] | rsi = *(rbx); 0x0041fe9c mov rdi, qword [rbx + 0x20] | rdi = *((rbx + 0x20)); 0x0041fea0 mov rax, qword [rdi] | rax = *(rdi); 0x0041fea3 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0041fea6 mov qword [rbx], rbp | *(rbx) = rbp; | } | label_4: 0x0041fea9 mov eax, dword [rsp + 0xc] | eax = *((rsp + 0xc)); 0x0041fead mov dword [rbx + 0x10], eax | *((rbx + 0x10)) = eax; 0x0041feb0 add rsp, 0x28 | 0x0041feb4 pop rbx | 0x0041feb5 pop r12 | 0x0041feb7 pop r13 | 0x0041feb9 pop r14 | 0x0041febb pop r15 | 0x0041febd pop rbp | 0x0041febe ret | return rax; | label_2: 0x0041febf mov rsi, rcx | rsi = rcx; 0x0041fec2 jmp 0x41fcff | | } while (1); | }