; assembly | /* r2dec pseudo code output */ | /* bblb_schedulegenerationutil.t/assume @ 0x41f180 */ | #include | ; (fcn) method.BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Unsigned_.append_BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Unsigned__const__unsigned_long__unsigned_long_ () | int64_t method_BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Unsigned_append_BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Unsigned_const_unsigned_long_unsigned_long_ (int64_t arg4, int64_t arg3, signed int64_t arg2, int64_t arg1, int64_t arg7, int64_t arg8) { | int64_t var_8h; | int64_t var_10h; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | xmm0 = arg7; | xmm1 = arg8; | /* BloombergLP::bdlc::PackedIntArrayImp::append(BloombergLP::bdlc::PackedIntArrayImp const&, unsigned long, unsigned long) */ 0x0041f180 push rbp | 0x0041f181 push r15 | 0x0041f183 push r14 | 0x0041f185 push r13 | 0x0041f187 push r12 | 0x0041f189 push rbx | 0x0041f18a sub rsp, 0x18 | 0x0041f18e mov r10, rcx | r10 = rcx; 0x0041f191 mov r15, rdx | r15 = rdx; 0x0041f194 mov r12, rsi | r12 = rsi; 0x0041f197 mov rbx, rdi | rbx = rdi; 0x0041f19a mov r14, qword [rdi + 8] | r14 = *((rdi + 8)); 0x0041f19e add r14, rcx | r14 += rcx; 0x0041f1a1 movsxd rax, dword [rdi + 0x10] | rax = *((rdi + 0x10)); 0x0041f1a5 cmp eax, dword [rsi + 0x10] | | if (eax >= *((rsi + 0x10))) { 0x0041f1a8 jge 0x41f269 | goto label_4; | } 0x0041f1ae mov rdi, r12 | 0x0041f1b1 mov rsi, r15 | 0x0041f1b4 mov qword [rsp + 8], r10 | *((rsp + 8)) = r10; 0x0041f1b9 mov rdx, r10 | rdx = r10; 0x0041f1bc call 0x41eae0 | eax = BloombergLP::bdlc::PackedIntArrayImp::requiredBytesPerElement(unsigned long,unsigned long)const (r12, r15); 0x0041f1c1 mov r13d, eax | r13d = eax; 0x0041f1c4 movsxd rax, dword [rbx + 0x10] | rax = *((rbx + 0x10)); 0x0041f1c8 cmp eax, r13d | | if (eax >= r13d) { 0x0041f1cb jge 0x41f2bc | goto label_5; | } 0x0041f1d1 movsxd rcx, r13d | rcx = (int64_t) r13d; 0x0041f1d4 imul rcx, r14 | rcx *= r14; 0x0041f1d8 mov rbp, qword [rbx + 0x18] | rbp = *((rbx + 0x18)); 0x0041f1dc cmp rcx, rbp | | if (rcx <= rbp) { 0x0041f1df jbe 0x41f33e | goto label_6; | } 0x0041f1e5 cmp rcx, 0x55555550 | | if (rcx > 0x55555550) { 0x0041f1ec ja 0x41f3db | goto label_7; | } 0x0041f1f2 nop word cs:[rax + rax] | 0x0041f1fc nop dword [rax] | | do { 0x0041f200 lea rax, [rbp + 3] | rax = rbp + 3; 0x0041f204 shr rax, 1 | rax >>= 1; 0x0041f207 add rbp, rax | rbp += rax; 0x0041f20a cmp rbp, rcx | 0x0041f20d jb 0x41f200 | | } while (rbp < rcx); | label_2: 0x0041f20f mov rax, qword [rbx] | rax = *(rbx); 0x0041f212 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0041f217 mov rdi, qword [rbx + 0x20] | rdi = *((rbx + 0x20)); 0x0041f21b mov rax, qword [rdi] | rax = *(rdi); 0x0041f21e mov rsi, rbp | rsi = rbp; 0x0041f221 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x0041f224 mov qword [rbx], rax | *(rbx) = rax; 0x0041f227 mov qword [rbx + 0x18], rbp | *((rbx + 0x18)) = rbp; 0x0041f22b mov r10d, dword [rbx + 0x10] | r10d = *((rbx + 0x10)); 0x0041f22f mov dword [rbx + 0x10], r13d | *((rbx + 0x10)) = r13d; 0x0041f233 mov rdi, rbx | 0x0041f236 mov rsi, rax | 0x0041f239 xor edx, edx | 0x0041f23b mov ecx, r13d | 0x0041f23e mov rbp, qword [rsp + 0x10] | rbp = *((rsp + 0x10)); 0x0041f243 mov r8, rbp | 0x0041f246 xor r9d, r9d | 0x0041f249 push qword [rbx + 8] | 0x0041f24c push r10 | 0x0041f24e call 0x41d190 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, rax, 0, r13d, *((rsp + 0x10)), 0); 0x0041f253 add rsp, 0x10 | 0x0041f257 mov rdi, qword [rbx + 0x20] | rdi = *((rbx + 0x20)); 0x0041f25b mov rax, qword [rdi] | rax = *(rdi); 0x0041f25e mov rsi, rbp | rsi = rbp; 0x0041f261 call qword [rax + 0x18] | rax = uint64_t (*rax + 0x18)() (); 0x0041f264 jmp 0x41f360 | goto label_8; | label_4: 0x0041f269 imul rax, r14 | rax *= r14; 0x0041f26d mov rcx, qword [rbx + 0x18] | rcx = *((rbx + 0x18)); 0x0041f271 cmp rax, rcx | | if (rax <= rcx) { 0x0041f274 jbe 0x41f365 | goto label_1; | } 0x0041f27a cmp rax, 0x55555550 | | if (rax > 0x55555550) { 0x0041f280 ja 0x41f3cd | goto label_9; | } 0x0041f286 mov rbp, rcx | 0x0041f289 nop dword [rax] | | do { 0x0041f290 lea rdx, [rbp + 3] | rdx = rbp + 3; 0x0041f294 shr rdx, 1 | rdx >>= 1; 0x0041f297 add rbp, rdx | rbp += rdx; 0x0041f29a cmp rbp, rax | 0x0041f29d jb 0x41f290 | | } while (rbp < rax); 0x0041f29f cmp rbp, rcx | | if (rbp <= rcx) { 0x0041f2a2 jbe 0x41f365 | goto label_1; | } | label_0: 0x0041f2a8 mov r13, qword [rbx] | r13 = *(rbx); 0x0041f2ab mov rdi, qword [rbx + 0x20] | rdi = *((rbx + 0x20)); 0x0041f2af mov rax, qword [rdi] | rax = *(rdi); 0x0041f2b2 mov rsi, rbp | rsi = rbp; 0x0041f2b5 mov qword [rsp + 8], r10 | *((rsp + 8)) = r10; 0x0041f2ba jmp 0x41f311 | goto label_10; | label_5: 0x0041f2bc imul rax, r14 | rax *= r14; 0x0041f2c0 mov rcx, qword [rbx + 0x18] | rcx = *((rbx + 0x18)); 0x0041f2c4 cmp rax, rcx | 0x0041f2c7 mov r10, qword [rsp + 8] | r10 = *((rsp + 8)); | if (rax <= rcx) { 0x0041f2cc jbe 0x41f365 | goto label_1; | } 0x0041f2d2 cmp rax, 0x55555550 | | if (rax > 0x55555550) { 0x0041f2d8 ja 0x41f3e3 | goto label_11; | } 0x0041f2de mov rbp, rcx | 0x0041f2e1 nop word cs:[rax + rax] | 0x0041f2eb nop dword [rax + rax] | | do { 0x0041f2f0 lea rdx, [rbp + 3] | rdx = rbp + 3; 0x0041f2f4 shr rdx, 1 | rdx >>= 1; 0x0041f2f7 add rbp, rdx | rbp += rdx; 0x0041f2fa cmp rbp, rax | 0x0041f2fd jb 0x41f2f0 | | } while (rbp < rax); 0x0041f2ff cmp rbp, rcx | | if (rbp > rcx) { 0x0041f302 jbe 0x41f365 | | label_3: 0x0041f304 mov r13, qword [rbx] | r13 = *(rbx); 0x0041f307 mov rdi, qword [rbx + 0x20] | rdi = *((rbx + 0x20)); 0x0041f30b mov rax, qword [rdi] | rax = *(rdi); 0x0041f30e mov rsi, rbp | rsi = rbp; | label_10: 0x0041f311 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x0041f314 mov qword [rbx], rax | *(rbx) = rax; 0x0041f317 mov qword [rbx + 0x18], rbp | *((rbx + 0x18)) = rbp; 0x0041f31b movsxd rdx, dword [rbx + 0x10] | rdx = *((rbx + 0x10)); 0x0041f31f imul rdx, qword [rbx + 8] | rdx *= *((rbx + 8)); 0x0041f324 mov rdi, rax | 0x0041f327 mov rsi, r13 | 0x0041f32a call 0x403b60 | memcpy (rax, r13, rdx); 0x0041f32f mov rdi, qword [rbx + 0x20] | rdi = *((rbx + 0x20)); 0x0041f333 mov rax, qword [rdi] | rax = *(rdi); 0x0041f336 mov rsi, r13 | rsi = r13; 0x0041f339 call qword [rax + 0x18] | rax = uint64_t (*rax + 0x18)() (); 0x0041f33c jmp 0x41f360 | goto label_8; | label_6: 0x0041f33e mov dword [rbx + 0x10], r13d | *((rbx + 0x10)) = r13d; 0x0041f342 mov rsi, qword [rbx] | rsi = *(rbx); 0x0041f345 mov rdi, rbx | 0x0041f348 xor edx, edx | 0x0041f34a mov ecx, r13d | 0x0041f34d mov r8, rsi | 0x0041f350 xor r9d, r9d | 0x0041f353 push qword [rbx + 8] | 0x0041f356 push rax | 0x0041f357 call 0x41d190 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, *(rsi), 0, r13d, rsi, 0); 0x0041f35c add rsp, 0x10 | | label_8: 0x0041f360 mov r10, qword [rsp + 8] | r10 = *((rsp + 8)); | } | label_1: 0x0041f365 movsxd rcx, dword [rbx + 0x10] | rcx = *((rbx + 0x10)); 0x0041f369 cmp ecx, dword [r12 + 0x10] | | if (ecx == *((r12 + 0x10))) { 0x0041f36e jne 0x41f39c | 0x0041f370 mov rdi, qword [rbx + 8] | 0x0041f374 imul rdi, rcx | rdi *= rcx; 0x0041f378 add rdi, qword [rbx] | rdi += *(rbx); 0x0041f37b imul r15, rcx | r15 *= rcx; 0x0041f37f add r15, qword [r12] | r15 += *(r12); 0x0041f383 imul r10, rcx | r10 *= rcx; 0x0041f387 mov rsi, r15 | 0x0041f38a mov rdx, r10 | 0x0041f38d call 0x403b60 | memcpy (*((rbx + 8)), r15, r10); 0x0041f392 mov qword [rbx + 8], r14 | *((rbx + 8)) = r14; 0x0041f396 add rsp, 0x18 | 0x0041f39a jmp 0x41f3c2 | | } else { 0x0041f39c mov rsi, qword [rbx] | rsi = *(rbx); 0x0041f39f mov rdx, qword [rbx + 8] | 0x0041f3a3 mov qword [rbx + 8], r14 | *((rbx + 8)) = r14; 0x0041f3a7 mov r8, qword [r12] | 0x0041f3ab mov eax, dword [r12 + 0x10] | eax = *((r12 + 0x10)); 0x0041f3b0 mov rdi, rbx | 0x0041f3b3 mov r9, r15 | 0x0041f3b6 push r10 | 0x0041f3b8 push rax | 0x0041f3b9 call 0x41d190 | rax = BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, *(rsi), *((rbx + 8)), rcx, *(r12), r15); 0x0041f3be add rsp, 0x28 | | } 0x0041f3c2 pop rbx | 0x0041f3c3 pop r12 | 0x0041f3c5 pop r13 | 0x0041f3c7 pop r14 | 0x0041f3c9 pop r15 | 0x0041f3cb pop rbp | 0x0041f3cc ret | return rax; | label_9: 0x0041f3cd mov rbp, rax | 0x0041f3d0 cmp rbp, rcx | | if (rbp > rcx) { 0x0041f3d3 ja 0x41f2a8 | goto label_0; | } 0x0041f3d9 jmp 0x41f365 | goto label_1; | label_7: 0x0041f3db mov rbp, rcx | 0x0041f3de jmp 0x41f20f | goto label_2; | label_11: 0x0041f3e3 mov rbp, rax | 0x0041f3e6 cmp rbp, rcx | | if (rbp > rcx) { 0x0041f3e9 ja 0x41f304 | goto label_3; | } 0x0041f3ef jmp 0x41f365 | goto label_1; | }