; assembly | /* r2dec pseudo code output */ | /* bblb_schedulegenerationutil.t/none @ 0x420150 */ | #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 arg5, int64_t arg4, int64_t arg3, int64_t arg2, uint32_t arg1) { | int64_t var_10h; | int64_t var_8h; | int64_t var_10h_2; | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlc::PackedIntArrayImp::replace(unsigned long, BloombergLP::bdlc::PackedIntArrayImp const&, unsigned long, unsigned long) */ 0x00420150 push rbp | 0x00420151 push r15 | 0x00420153 push r14 | 0x00420155 push r13 | 0x00420157 push r12 | 0x00420159 push rbx | 0x0042015a sub rsp, 0x18 | 0x0042015e mov r14, r8 | r14 = r8; 0x00420161 mov r15, rcx | r15 = rcx; 0x00420164 mov r12, rsi | r12 = rsi; 0x00420167 mov rbx, rdi | rbx = rdi; 0x0042016a cmp rdi, rdx | | if (rdi != rdx) { 0x0042016d je 0x4201b0 | 0x0042016f mov r9, rdx | r9 = rdx; 0x00420172 mov r11d, dword [rbx + 0x10] | r11d = *((rbx + 0x10)); 0x00420176 mov r10d, dword [rdx + 0x10] | r10d = *((rdx + 0x10)); 0x0042017a cmp r11d, r10d | | if (r11d != r10d) { 0x0042017d jne 0x4201e5 | goto label_1; | } 0x0042017f movsxd rax, r11d | rax = (int64_t) r11d; 0x00420182 imul r12, rax | r12 *= rax; 0x00420186 add r12, qword [rbx] | r12 += *(rbx); 0x00420189 imul r15, rax | r15 *= rax; 0x0042018d add r15, qword [r9] | r15 += *(r9); 0x00420190 imul r14, rax | r14 *= rax; 0x00420194 mov rdi, r12 | rdi = r12; 0x00420197 mov rsi, r15 | rsi = r15; 0x0042019a mov rdx, r14 | rdx = r14; 0x0042019d add rsp, 0x18 | 0x004201a1 pop rbx | 0x004201a2 pop r12 | 0x004201a4 pop r13 | 0x004201a6 pop r14 | 0x004201a8 pop r15 | 0x004201aa pop rbp | 0x004201ab jmp 0x403b60 | void (*0x403b60)() (); | } 0x004201b0 mov rax, qword [rbx] | rax = *(rbx); 0x004201b3 movsxd rcx, dword [rbx + 0x10] | rcx = *((rbx + 0x10)); 0x004201b7 imul r12, rcx | r12 *= rcx; 0x004201bb add r12, rax | r12 += rax; 0x004201be imul r15, rcx | r15 *= rcx; 0x004201c2 add r15, rax | r15 += rax; 0x004201c5 imul r14, rcx | r14 *= rcx; 0x004201c9 mov rdi, r12 | rdi = r12; 0x004201cc mov rsi, r15 | rsi = r15; 0x004201cf mov rdx, r14 | rdx = r14; 0x004201d2 add rsp, 0x18 | 0x004201d6 pop rbx | 0x004201d7 pop r12 | 0x004201d9 pop r13 | 0x004201db pop r14 | 0x004201dd pop r15 | 0x004201df pop rbp | 0x004201e0 jmp 0x403910 | void (*0x403910)() (); | label_1: 0x004201e5 mov ebp, r11d | | if (r15 >= 0) { 0x004201e8 jge 0x420319 | goto label_2; | } 0x004201ee lea rax, [r14 + r15] | rax = r14 + r15; 0x004201f2 mov ebp, 1 | 0x004201f7 cmp r10d, 8 | | if (r10d == 8) { 0x004201fb je 0x42024d | goto label_3; | } 0x004201fd cmp r10d, 4 | | if (r10d == 4) { 0x00420201 je 0x4202c1 | goto label_4; | } 0x00420207 cmp r10d, 2 | | if (r10d != 2) { 0x0042020b jne 0x420312 | goto label_5; | } 0x00420211 cmp rax, r15 | | if (rax <= r15) { 0x00420214 jbe 0x420312 | goto label_5; | } 0x0042021a mov rax, qword [r9] | rax = *(r9); 0x0042021d lea rax, [rax + r15*2] | rax = rax + r15*2; 0x00420221 xor ecx, ecx | ecx = 0; 0x00420223 nop word cs:[rax + rax] | 0x0042022d nop dword [rax] | | do { 0x00420230 movzx edx, word [rax + rcx*2] | edx = *((rax + rcx*2)); 0x00420234 cmp edx, 0xff | | if (edx > 0xff) { 0x0042023a ja 0x420306 | goto label_6; | } 0x00420240 inc rcx | rcx++; 0x00420243 cmp r14, rcx | 0x00420246 jne 0x420230 | | } while (r14 != rcx); 0x00420248 jmp 0x420312 | goto label_5; | label_3: 0x0042024d cmp rax, r15 | | if (rax <= r15) { 0x00420250 jbe 0x420312 | goto label_5; | } 0x00420256 mov rax, qword [r9] | rax = *(r9); 0x00420259 lea r8, [rax + r15*8] | r8 = rax + r15*8; 0x0042025d mov ebp, 1 | 0x00420262 xor edx, edx | edx = 0; 0x00420264 jmp 0x42027c | | while (esi >= ebp) { | label_0: 0x00420270 inc rdx | rdx++; 0x00420273 cmp r14, rdx | | if (r14 == rdx) { 0x00420276 je 0x420312 | goto label_5; | } 0x0042027c mov esi, ebp | esi = ebp; 0x0042027e mov rdi, qword [r8 + rdx*8] | rdi = *((r8 + rdx*8)); 0x00420282 xor ebp, ebp | ebp = 0; 0x00420284 mov rax, rdi | rax = rdi; 0x00420287 shr rax, 0x20 | rax >>= 0x20; 0x0042028b setne bpl | bpl = (rax != 0) ? 1 : 0; 0x0042028f xor ecx, ecx | ecx = 0; 0x00420291 cmp rdi, 0xff | 0x00420298 seta cl | cl = (rdi > 0xff) ? 1 : 0; 0x0042029b inc ecx | ecx++; 0x0042029d cmp rdi, 0xffff | 0x004202a4 lea ebp, [rbp*4 + 4] | ebp = rbp*4 + 4; | if (rdi <= 0xffff) { 0x004202ab cmovbe ebp, ecx | | } 0x004202ae cmp esi, ebp | | if (esi >= ebp) { 0x004202b0 cmovae ebp, esi | | } 0x004202b3 jae 0x420270 | | } 0x004202b5 test rax, rax | | if (rax == 0) { 0x004202b8 je 0x420270 | goto label_0; | } 0x004202ba mov ebp, 8 | 0x004202bf jmp 0x420312 | goto label_5; | label_4: 0x004202c1 cmp rax, r15 | | if (rax <= r15) { 0x004202c4 jbe 0x420312 | goto label_5; | } 0x004202c6 mov rax, qword [r9] | rax = *(r9); 0x004202c9 lea rcx, [rax + r15*4] | rcx = rax + r15*4; 0x004202cd mov ebp, 1 | 0x004202d2 xor edx, edx | edx = 0; 0x004202d4 nop word cs:[rax + rax] | 0x004202de nop | | do { 0x004202e0 mov eax, dword [rcx + rdx*4] | eax = *((rcx + rdx*4)); 0x004202e3 cmp eax, 0xffff | | if (eax > 0xffff) { 0x004202e8 ja 0x42030d | goto label_7; | } 0x004202ea xor esi, esi | esi = 0; 0x004202ec cmp eax, 0xff | 0x004202f1 seta sil | sil = (eax > 0xff) ? 1 : 0; 0x004202f5 inc esi | esi++; 0x004202f7 cmp ebp, esi | | if (ebp < esi) { 0x004202f9 cmovb ebp, esi | | } 0x004202fc inc rdx | rdx++; 0x004202ff cmp r14, rdx | 0x00420302 jne 0x4202e0 | | } while (r14 != rdx); 0x00420304 jmp 0x420312 | goto label_5; | label_6: 0x00420306 mov ebp, 2 | 0x0042030b jmp 0x420312 | goto label_5; | label_7: 0x0042030d mov ebp, 4 | | label_5: 0x00420312 cmp r11d, ebp | | if (r11d >= ebp) { 0x00420315 cmovge ebp, r11d | | } | label_2: 0x00420319 movsxd rdx, ebp | rdx = (int64_t) ebp; 0x0042031c mov rax, qword [rbx + 8] | rax = *((rbx + 8)); 0x00420320 mov rsi, qword [rbx + 0x18] | rsi = *((rbx + 0x18)); 0x00420324 mov rcx, rax | rcx = rax; 0x00420327 mov qword [rsp + 8], rdx | *((rsp + 8)) = rdx; 0x0042032c imul rcx, rdx | rcx *= rdx; 0x00420330 lea r13, [r14 + r12] | r13 = r14 + r12; 0x00420334 cmp rcx, rsi | | if (rcx <= rsi) { 0x00420337 jbe 0x4203b4 | goto label_8; | } 0x00420339 cmp rcx, 0x55555550 | 0x00420340 mov qword [rsp], r9 | *(rsp) = r9; | if (rcx > 0x55555550) { 0x00420344 ja 0x420517 | goto label_9; | } 0x0042034a nop word [rax + rax] | | do { 0x00420350 lea rax, [rsi + 3] | rax = rsi + 3; 0x00420354 shr rax, 1 | rax >>= 1; 0x00420357 add rsi, rax | rsi += rax; 0x0042035a cmp rsi, rcx | 0x0042035d jb 0x420350 | | } while (rsi < rcx); | do { 0x0042035f mov rdi, qword [rbx + 0x20] | rdi = *((rbx + 0x20)); 0x00420363 mov rax, qword [rdi] | rax = *(rdi); 0x00420366 call qword [rax + 0x10] | uint64_t (*rax + 0x10)() (); 0x00420369 mov r10d, dword [rbx + 0x10] | r10d = *((rbx + 0x10)); 0x0042036d cmp r10d, ebp | | if (r10d == ebp) { 0x00420370 jne 0x42043b | 0x00420376 mov rsi, r13 | 0x00420379 mov rcx, qword [rsp + 8] | rcx = *((rsp + 8)); 0x0042037e imul rsi, rcx | rsi *= rcx; 0x00420382 lea rdi, [rax + rsi] | 0x00420386 add rsi, qword [rbx] | rsi += *(rbx); 0x00420389 mov rdx, qword [rbx + 8] | 0x0042038d sub rdx, r13 | rdx -= r13; 0x00420390 imul rdx, rcx | rdx *= rcx; 0x00420394 mov r13, rax | r13 = rax; 0x00420397 call 0x403b60 | memcpy (rax + rsi, r13, *((rbx + 8))); 0x0042039c mov rsi, qword [rbx] | 0x0042039f movsxd rdx, dword [rbx + 0x10] | rdx = *((rbx + 0x10)); 0x004203a3 imul rdx, r12 | rdx *= r12; 0x004203a7 mov rdi, r13 | 0x004203aa call 0x403b60 | rax = memcpy (r13, *(rbx), rdx); 0x004203af jmp 0x420489 | goto label_10; | label_8: 0x004203b4 cmp r11d, ebp | | if (r11d != ebp) { 0x004203b7 je 0x420405 | 0x004203b9 mov rsi, qword [rbx] | rsi = *(rbx); 0x004203bc sub rax, r13 | rax -= r13; 0x004203bf mov rdi, rbx | 0x004203c2 mov rdx, r13 | rdx = r13; 0x004203c5 mov ecx, ebp | 0x004203c7 mov r8, rsi | 0x004203ca mov qword [rsp], r9 | *(rsp) = r9; 0x004203ce mov r9, r13 | 0x004203d1 push rax | 0x004203d2 push r11 | 0x004203d4 call 0x41d590 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, *(rsi), rdx, ebp, rsi, r13); 0x004203d9 add rsp, 0x10 | 0x004203dd mov rsi, qword [rbx] | rsi = *(rbx); 0x004203e0 mov eax, dword [rbx + 0x10] | eax = *((rbx + 0x10)); 0x004203e3 mov rdi, rbx | 0x004203e6 xor edx, edx | 0x004203e8 mov ecx, ebp | 0x004203ea mov r8, rsi | 0x004203ed xor r9d, r9d | 0x004203f0 push r12 | 0x004203f2 push rax | 0x004203f3 call 0x41d590 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, *(rsi), 0, ebp, rsi, 0); 0x004203f8 mov r9, qword [rsp + 0x10] | r9 = *((rsp + 0x10)); 0x004203fd add rsp, 0x10 | 0x00420401 mov r10d, dword [r9 + 0x10] | r10d = *((r9 + 0x10)); | } 0x00420405 mov rsi, qword [rbx] | rsi = *(rbx); 0x00420408 cmp ebp, r10d | | if (ebp == r10d) { 0x0042040b jne 0x4204bb | 0x00420411 mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x00420416 imul r12, rax | r12 *= rax; 0x0042041a add rsi, r12 | rsi += r12; 0x0042041d imul r15, rax | r15 *= rax; 0x00420421 add r15, qword [r9] | r15 += *(r9); 0x00420424 imul r14, rax | r14 *= rax; 0x00420428 mov rdi, rsi | 0x0042042b mov rsi, r15 | 0x0042042e mov rdx, r14 | 0x00420431 call 0x403b60 | rax = memcpy (rsi, r15, r14); 0x00420436 jmp 0x420505 | | } else { 0x0042043b mov r8, qword [rbx] | r8 = *(rbx); 0x0042043e mov r11, qword [rbx + 8] | r11 = *((rbx + 8)); 0x00420442 sub r11, r13 | r11 -= r13; 0x00420445 mov rdi, rbx | 0x00420448 mov rsi, rax | rsi = rax; 0x0042044b mov rdx, r13 | rdx = r13; 0x0042044e mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x00420453 mov ecx, ebp | 0x00420455 mov r9, r13 | 0x00420458 push r11 | 0x0042045a push r10 | 0x0042045c call 0x41d590 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, rsi, rdx, ebp, *(r8), r13); 0x00420461 add rsp, 0x10 | 0x00420465 mov r8, qword [rbx] | r8 = *(rbx); 0x00420468 mov eax, dword [rbx + 0x10] | eax = *((rbx + 0x10)); 0x0042046b mov rdi, rbx | 0x0042046e mov r13, qword [rsp + 0x10] | r13 = *((rsp + 0x10)); 0x00420473 mov rsi, r13 | 0x00420476 xor edx, edx | 0x00420478 mov ecx, ebp | 0x0042047a xor r9d, r9d | 0x0042047d push r12 | 0x0042047f push rax | 0x00420480 call 0x41d590 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, *((rsp + 0x10)), 0, ebp, *(r8), 0); 0x00420485 add rsp, 0x10 | | label_10: 0x00420489 mov rcx, qword [rsp] | rcx = *(rsp); 0x0042048d mov eax, dword [rcx + 0x10] | eax = *((rcx + 0x10)); 0x00420490 cmp ebp, eax | | if (ebp == eax) { 0x00420492 jne 0x4204d8 | 0x00420494 mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x00420499 imul r12, rax | r12 *= rax; 0x0042049d mov rdi, r13 | 0x004204a0 add rdi, r12 | rdi += r12; 0x004204a3 imul r15, rax | r15 *= rax; 0x004204a7 add r15, qword [rcx] | r15 += *(rcx); 0x004204aa imul r14, rax | r14 *= rax; 0x004204ae mov rsi, r15 | 0x004204b1 mov rdx, r14 | 0x004204b4 call 0x403b60 | memcpy (r13, r15, r14); 0x004204b9 jmp 0x4204f5 | | } else { 0x004204bb mov r8, qword [r9] | 0x004204be mov rdi, rbx | 0x004204c1 mov rdx, r12 | 0x004204c4 mov ecx, ebp | 0x004204c6 mov r9, r15 | 0x004204c9 push r14 | 0x004204cb push r10 | 0x004204cd call 0x41d590 | rax = BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, rsi, r12, ebp, *(r9), r15); 0x004204d2 add rsp, 0x10 | 0x004204d6 jmp 0x420505 | goto label_11; | } 0x004204d8 mov r8, qword [rcx] | 0x004204db mov rdi, rbx | 0x004204de mov rsi, r13 | 0x004204e1 mov rdx, r12 | 0x004204e4 mov ecx, ebp | 0x004204e6 mov r9, r15 | 0x004204e9 push r14 | 0x004204eb push rax | 0x004204ec call 0x41d590 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, r13, r12, ebp, *(rcx), r15); 0x004204f1 add rsp, 0x10 | | } 0x004204f5 mov rsi, qword [rbx] | rsi = *(rbx); 0x004204f8 mov rdi, qword [rbx + 0x20] | rdi = *((rbx + 0x20)); 0x004204fc mov rax, qword [rdi] | rax = *(rdi); 0x004204ff call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00420502 mov qword [rbx], r13 | *(rbx) = r13; | } | label_11: 0x00420505 mov dword [rbx + 0x10], ebp | *((rbx + 0x10)) = ebp; 0x00420508 add rsp, 0x18 | 0x0042050c pop rbx | 0x0042050d pop r12 | 0x0042050f pop r13 | 0x00420511 pop r14 | 0x00420513 pop r15 | 0x00420515 pop rbp | 0x00420516 ret | return rax; | label_9: 0x00420517 mov rsi, rcx | rsi = rcx; 0x0042051a jmp 0x42035f | | } while (1); | }