; assembly | /* r2dec pseudo code output */ | /* bblb_schedulegenerationutil.t/none @ 0x41bdb0 */ | #include | ; (fcn) method.BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Signed_.append_long_ () | int64_t method_BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Signed_append_long_ (signed int64_t arg2, int64_t arg1, int64_t arg7, int64_t arg8) { | rsi = arg2; | rdi = arg1; | xmm0 = arg7; | xmm1 = arg8; | /* BloombergLP::bdlc::PackedIntArrayImp::append(long) */ 0x0041bdb0 push rbp | 0x0041bdb1 push r15 | 0x0041bdb3 push r14 | 0x0041bdb5 push r13 | 0x0041bdb7 push r12 | 0x0041bdb9 push rbx | 0x0041bdba push rax | 0x0041bdbb mov r14, rsi | r14 = rsi; 0x0041bdbe mov rbx, rdi | rbx = rdi; 0x0041bdc1 mov r10, qword [rdi + 8] | r10 = *((rdi + 8)); 0x0041bdc5 cmp rsi, 0xffffffffffffff80 | | if (rsi < 0xffffffffffffff80) { 0x0041bdc9 jge 0x41bde8 | 0x0041bdcb mov r15d, 2 | r15d = 2; 0x0041bdd1 cmp r14, 0xffffffffffff7fff | | if (r14 > 0xffffffffffff7fff) { 0x0041bdd8 jg 0x41be15 | goto label_2; | } 0x0041bdda xor eax, eax | eax = 0; 0x0041bddc cmp r14, 0xffffffff80000000 | 0x0041bde3 setl al | al = (r14 < 0xffffffff80000000) ? 1 : 0; 0x0041bde6 jmp 0x41bdfd | | } else { 0x0041bde8 cmp r14, 0x8000 | | if (r14 < 0x8000) { 0x0041bdef jl 0x41be07 | goto label_3; | } 0x0041bdf1 xor eax, eax | eax = 0; 0x0041bdf3 cmp r14, 0x7fffffff | 0x0041bdfa setg al | al = (r14 > 0x7fffffff) ? 1 : 0; | } 0x0041bdfd lea r15d, [rax*4 + 4] | r15d = rax*4 + 4; 0x0041be05 jmp 0x41be15 | goto label_2; | label_3: 0x0041be07 xor r15d, r15d | r15d = 0; 0x0041be0a cmp r14, 0x7f | 0x0041be0e setg r15b | r15b = (r14 > 0x7f) ? 1 : 0; 0x0041be12 inc r15d | r15d++; | label_2: 0x0041be15 lea r13, [r10 + 1] | r13 = r10 + 1; 0x0041be19 movsxd rax, dword [rbx + 0x10] | rax = *((rbx + 0x10)); 0x0041be1d cmp eax, r15d | | if (eax >= r15d) { 0x0041be20 jge 0x41bead | goto label_4; | } 0x0041be26 mov ecx, r15d | ecx = r15d; 0x0041be29 imul rcx, r13 | rcx *= r13; 0x0041be2d mov rbp, qword [rbx + 0x18] | rbp = *((rbx + 0x18)); 0x0041be31 cmp rcx, rbp | | if (rcx <= rbp) { 0x0041be34 jbe 0x41bf1e | goto label_5; | } 0x0041be3a cmp rcx, 0x55555550 | | if (rcx > 0x55555550) { 0x0041be41 ja 0x41bf8a | goto label_6; | } 0x0041be47 nop word [rax + rax] | | do { 0x0041be50 lea rax, [rbp + 3] | rax = rbp + 3; 0x0041be54 shr rax, 1 | rax >>= 1; 0x0041be57 add rbp, rax | rbp += rax; 0x0041be5a cmp rbp, rcx | 0x0041be5d jb 0x41be50 | | } while (rbp < rcx); | label_0: 0x0041be5f mov r12, qword [rbx] | r12 = *(rbx); 0x0041be62 mov rdi, qword [rbx + 0x20] | rdi = *((rbx + 0x20)); 0x0041be66 mov rax, qword [rdi] | rax = *(rdi); 0x0041be69 mov rsi, rbp | rsi = rbp; 0x0041be6c call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x0041be6f mov qword [rbx], rax | *(rbx) = rax; 0x0041be72 mov qword [rbx + 0x18], rbp | *((rbx + 0x18)) = rbp; 0x0041be76 mov ebp, dword [rbx + 0x10] | ebp = *((rbx + 0x10)); 0x0041be79 mov dword [rbx + 0x10], r15d | *((rbx + 0x10)) = r15d; 0x0041be7d mov rdi, rbx | 0x0041be80 mov rsi, rax | 0x0041be83 xor edx, edx | 0x0041be85 mov ecx, r15d | 0x0041be88 mov r8, r12 | 0x0041be8b xor r9d, r9d | 0x0041be8e push qword [rbx + 8] | 0x0041be91 push rbp | 0x0041be92 call 0x41a170 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, rax, 0, r15d, r12, 0); 0x0041be97 add rsp, 0x10 | 0x0041be9b mov rdi, qword [rbx + 0x20] | rdi = *((rbx + 0x20)); 0x0041be9f mov rax, qword [rdi] | rax = *(rdi); 0x0041bea2 mov rsi, r12 | rsi = r12; 0x0041bea5 call qword [rax + 0x18] | rax = uint64_t (*rax + 0x18)() (); 0x0041bea8 jmp 0x41bf3f | goto label_1; | label_4: 0x0041bead imul rax, r13 | rax *= r13; 0x0041beb1 mov rcx, qword [rbx + 0x18] | rcx = *((rbx + 0x18)); 0x0041beb5 cmp rax, rcx | | if (rax <= rcx) { 0x0041beb8 jbe 0x41bf3f | goto label_1; | } 0x0041bebe cmp rax, 0x55555550 | | if (rax > 0x55555550) { 0x0041bec4 ja 0x41bf92 | goto label_7; | } 0x0041beca mov rbp, rcx | 0x0041becd nop dword [rax] | | do { 0x0041bed0 lea rdx, [rbp + 3] | rdx = rbp + 3; 0x0041bed4 shr rdx, 1 | rdx >>= 1; 0x0041bed7 add rbp, rdx | rbp += rdx; 0x0041beda cmp rbp, rax | 0x0041bedd jb 0x41bed0 | | } while (rbp < rax); 0x0041bedf cmp rbp, rcx | 0x0041bee2 jbe 0x41bf3f | | while (rbp > rcx) { 0x0041bee4 mov r15, qword [rbx] | r15 = *(rbx); 0x0041bee7 mov rdi, qword [rbx + 0x20] | rdi = *((rbx + 0x20)); 0x0041beeb mov rax, qword [rdi] | rax = *(rdi); 0x0041beee mov rsi, rbp | rsi = rbp; 0x0041bef1 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x0041bef4 mov qword [rbx], rax | *(rbx) = rax; 0x0041bef7 mov qword [rbx + 0x18], rbp | *((rbx + 0x18)) = rbp; 0x0041befb movsxd rdx, dword [rbx + 0x10] | rdx = *((rbx + 0x10)); 0x0041beff imul rdx, qword [rbx + 8] | rdx *= *((rbx + 8)); 0x0041bf04 mov rdi, rax | 0x0041bf07 mov rsi, r15 | 0x0041bf0a call 0x403b60 | memcpy (rax, r15, rdx); 0x0041bf0f mov rdi, qword [rbx + 0x20] | rdi = *((rbx + 0x20)); 0x0041bf13 mov rax, qword [rdi] | rax = *(rdi); 0x0041bf16 mov rsi, r15 | rsi = r15; 0x0041bf19 call qword [rax + 0x18] | rax = uint64_t (*rax + 0x18)() (); 0x0041bf1c jmp 0x41bf3f | goto label_1; | label_5: 0x0041bf1e mov dword [rbx + 0x10], r15d | *((rbx + 0x10)) = r15d; 0x0041bf22 mov rsi, qword [rbx] | rsi = *(rbx); 0x0041bf25 mov rdi, rbx | 0x0041bf28 xor edx, edx | 0x0041bf2a mov ecx, r15d | 0x0041bf2d mov r8, rsi | 0x0041bf30 xor r9d, r9d | 0x0041bf33 push r10 | 0x0041bf35 push rax | 0x0041bf36 call 0x41a170 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (rbx, *(rsi), 0, r15d, rsi, 0); 0x0041bf3b add rsp, 0x10 | | label_1: 0x0041bf3f mov rax, qword [rbx + 8] | rax = *((rbx + 8)); 0x0041bf43 mov qword [rbx + 8], r13 | *((rbx + 8)) = r13; 0x0041bf47 mov ecx, dword [rbx + 0x10] | ecx = *((rbx + 0x10)); 0x0041bf4a dec ecx | ecx--; 0x0041bf4c cmp ecx, 7 | | if (ecx <= 7) { 0x0041bf4f ja 0x41bf7b | | /* switch table (8 cases) at 0x4603b0 */ 0x0041bf51 jmp qword [rcx*8 + 0x4603b0] | 0x0041bf58 mov rcx, qword [rbx] | rcx = *(rbx); 0x0041bf5b mov byte [rcx + rax], r14b | *((rcx + rax)) = r14b; 0x0041bf5f jmp 0x41bf7b | goto label_8; 0x0041bf61 mov rcx, qword [rbx] | rcx = *(rbx); 0x0041bf64 mov word [rcx + rax*2], r14w | *((rcx + rax*2)) = r14w; 0x0041bf69 jmp 0x41bf7b | goto label_8; 0x0041bf6b mov rcx, qword [rbx] | rcx = *(rbx); 0x0041bf6e mov dword [rcx + rax*4], r14d | *((rcx + rax*4)) = r14d; 0x0041bf72 jmp 0x41bf7b | goto label_8; 0x0041bf74 mov rcx, qword [rbx] | rcx = *(rbx); 0x0041bf77 mov qword [rcx + rax*8], r14 | *((rcx + rax*8)) = r14; | } | label_8: 0x0041bf7b add rsp, 8 | 0x0041bf7f pop rbx | 0x0041bf80 pop r12 | 0x0041bf82 pop r13 | 0x0041bf84 pop r14 | 0x0041bf86 pop r15 | 0x0041bf88 pop rbp | 0x0041bf89 ret | return rax; | label_6: 0x0041bf8a mov rbp, rcx | 0x0041bf8d jmp 0x41be5f | goto label_0; | label_7: 0x0041bf92 mov rbp, rax | 0x0041bf95 cmp rbp, rcx | 0x0041bf98 ja 0x41bee4 | | } 0x0041bf9e jmp 0x41bf3f | goto label_1; | }