; assembly | /* r2dec pseudo code output */ | /* bblb_schedulegenerationutil.t/none @ 0x420000 */ | #include | ; (fcn) method.BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Unsigned_.replace_unsigned_long__unsigned_long_ () | uint64_t method_BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Unsigned_replace_unsigned_long_unsigned_long_ (uint32_t arg3, int64_t arg2, int64_t arg1) { | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlc::PackedIntArrayImp::replace(unsigned long, unsigned long) */ 0x00420000 push rbp | 0x00420001 push r15 | 0x00420003 push r14 | 0x00420005 push r13 | 0x00420007 push r12 | 0x00420009 push rbx | 0x0042000a push rax | 0x0042000b mov r15, rdx | r15 = rdx; 0x0042000e xor eax, eax | eax = 0; 0x00420010 mov rcx, rdx | rcx = rdx; 0x00420013 shr rcx, 0x20 | rcx >>= 0x20; 0x00420017 setne al | al = (rcx != 0) ? 1 : 0; 0x0042001a xor ecx, ecx | ecx = 0; 0x0042001c cmp rdx, 0xff | 0x00420023 seta cl | cl = (rdx > 0xff) ? 1 : 0; 0x00420026 inc ecx | ecx++; 0x00420028 cmp rdx, 0xffff | 0x0042002f lea ebp, [rax*4 + 4] | ebp = rax*4 + 4; | if (rdx <= 0xffff) { 0x00420036 cmovbe ebp, ecx | | } 0x00420039 mov r14, rsi | r14 = rsi; 0x0042003c mov r12, rdi | r12 = rdi; 0x0042003f mov eax, dword [rdi + 0x10] | eax = *((rdi + 0x10)); 0x00420042 cmp eax, ebp | | if (eax >= ebp) { 0x00420044 jge 0x4200fa | goto label_0; | } 0x0042004a mov ecx, ebp | ecx = ebp; 0x0042004c mov r10, qword [r12 + 8] | r10 = *((r12 + 8)); 0x00420051 mov rbx, qword [r12 + 0x18] | rbx = *((r12 + 0x18)); 0x00420056 imul rcx, r10 | rcx *= r10; 0x0042005a cmp rcx, rbx | | if (rcx <= rbx) { 0x0042005d jbe 0x4200d3 | goto label_1; | } 0x0042005f cmp rcx, 0x55555550 | | if (rcx > 0x55555550) { 0x00420066 ja 0x42013e | goto label_2; | } 0x0042006c nop dword [rax] | | do { 0x00420070 lea rax, [rbx + 3] | rax = rbx + 3; 0x00420074 shr rax, 1 | rax >>= 1; 0x00420077 add rbx, rax | rbx += rax; 0x0042007a cmp rbx, rcx | 0x0042007d jb 0x420070 | | } while (rbx < rcx); | do { 0x0042007f mov r13, qword [r12] | r13 = *(r12); 0x00420083 mov rdi, qword [r12 + 0x20] | rdi = *((r12 + 0x20)); 0x00420088 mov rax, qword [rdi] | rax = *(rdi); 0x0042008b mov rsi, rbx | rsi = rbx; 0x0042008e call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x00420091 mov qword [r12], rax | *(r12) = rax; 0x00420095 mov qword [r12 + 0x18], rbx | *((r12 + 0x18)) = rbx; 0x0042009a mov ebx, dword [r12 + 0x10] | ebx = *((r12 + 0x10)); 0x0042009f mov dword [r12 + 0x10], ebp | *((r12 + 0x10)) = ebp; 0x004200a4 mov rdi, r12 | 0x004200a7 mov rsi, rax | 0x004200aa xor edx, edx | 0x004200ac mov ecx, ebp | 0x004200ae mov r8, r13 | 0x004200b1 xor r9d, r9d | 0x004200b4 push qword [r12 + 8] | 0x004200b9 push rbx | 0x004200ba call 0x41d590 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (r12, rax, 0, ebp, r13, 0); 0x004200bf add rsp, 0x10 | 0x004200c3 mov rdi, qword [r12 + 0x20] | rdi = *((r12 + 0x20)); 0x004200c8 mov rax, qword [rdi] | rax = *(rdi); 0x004200cb mov rsi, r13 | rsi = r13; 0x004200ce call qword [rax + 0x18] | rax = uint64_t (*rax + 0x18)() (); 0x004200d1 jmp 0x4200f5 | goto label_3; | label_1: 0x004200d3 mov dword [r12 + 0x10], ebp | *((r12 + 0x10)) = ebp; 0x004200d8 mov rsi, qword [r12] | rsi = *(r12); 0x004200dc mov rdi, r12 | 0x004200df xor edx, edx | 0x004200e1 mov ecx, ebp | 0x004200e3 mov r8, rsi | 0x004200e6 xor r9d, r9d | 0x004200e9 push r10 | 0x004200eb push rax | 0x004200ec call 0x41d590 | BloombergLP::bdlc::PackedIntArrayImp::replaceImp(void*,unsigned long,int,void*,unsigned long,int,unsigned long) (r12, *(rsi), 0, ebp, rsi, 0); 0x004200f1 add rsp, 0x10 | | label_3: 0x004200f5 mov eax, dword [r12 + 0x10] | eax = *((r12 + 0x10)); | label_0: 0x004200fa dec eax | eax--; 0x004200fc cmp eax, 7 | | if (eax <= 7) { 0x004200ff ja 0x42012f | | /* switch table (8 cases) at 0x460670 */ 0x00420101 jmp qword [rax*8 + 0x460670] | 0x00420108 mov rax, qword [r12] | rax = *(r12); 0x0042010c mov byte [rax + r14], r15b | *((rax + r14)) = r15b; 0x00420110 jmp 0x42012f | goto label_4; 0x00420112 mov rax, qword [r12] | rax = *(r12); 0x00420116 mov word [rax + r14*2], r15w | *((rax + r14*2)) = r15w; 0x0042011b jmp 0x42012f | goto label_4; 0x0042011d mov rax, qword [r12] | rax = *(r12); 0x00420121 mov dword [rax + r14*4], r15d | *((rax + r14*4)) = r15d; 0x00420125 jmp 0x42012f | goto label_4; 0x00420127 mov rax, qword [r12] | rax = *(r12); 0x0042012b mov qword [rax + r14*8], r15 | *((rax + r14*8)) = r15; | } | label_4: 0x0042012f add rsp, 8 | 0x00420133 pop rbx | 0x00420134 pop r12 | 0x00420136 pop r13 | 0x00420138 pop r14 | 0x0042013a pop r15 | 0x0042013c pop rbp | 0x0042013d ret | return rax; | label_2: 0x0042013e mov rbx, rcx | rbx = rcx; 0x00420141 jmp 0x42007f | | } while (1); | }