; assembly | /* r2dec pseudo code output */ | /* bblb_schedulegenerationutil.t/none @ 0x41bad0 */ | #include | ; (fcn) method.BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Signed_.PackedIntArrayImp_unsigned_long__long__BloombergLP::bslma::Allocator_ () | uint64_t method_BloombergLP::bdlc::PackedIntArrayImp_BloombergLP::bdlc::PackedIntArrayImp_Signed_PackedIntArrayImp_unsigned_long_long_BloombergLP::bslma::Allocator_ (int64_t arg4, int64_t arg3, uint32_t arg2, int64_t arg1) { | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlc::PackedIntArrayImp::PackedIntArrayImp(unsigned long, long, BloombergLP::bslma::Allocator*) */ 0x0041bad0 push r14 | 0x0041bad2 push rbx | 0x0041bad3 push rax | 0x0041bad4 mov r14, rdx | r14 = rdx; 0x0041bad7 mov rbx, rdi | rbx = rdi; 0x0041bada mov qword [rdi], 0 | *(rdi) = 0; 0x0041bae1 mov qword [rdi + 8], rsi | *((rdi + 8)) = rsi; 0x0041bae5 mov dword [rdi + 0x10], 1 | *((rdi + 0x10)) = 1; 0x0041baec mov qword [rdi + 0x18], 0 | *((rdi + 0x18)) = 0; 0x0041baf4 test rcx, rcx | | if (rcx == 0) { 0x0041baf7 jne 0x41bb11 | 0x0041baf9 mov rcx, qword [rip + 0x261398] | rcx = BloombergLP::bslma::Default::s_defaultAllocator; 0x0041bb00 test rcx, rcx | | if (rcx != 0) { 0x0041bb03 jne 0x41bb11 | goto label_1; | } 0x0041bb05 call 0x4218f0 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x0041bb0a mov rcx, rax | rcx = rax; 0x0041bb0d mov rsi, qword [rbx + 8] | rsi = *((rbx + 8)); | } | label_1: 0x0041bb11 mov qword [rbx + 0x20], rcx | *((rbx + 0x20)) = rcx; 0x0041bb15 test rsi, rsi | | if (rsi == 0) { 0x0041bb18 je 0x41bc3d | goto label_2; | } 0x0041bb1e cmp r14, 0xffffffffffffff80 | | if (r14 < 0xffffffffffffff80) { 0x0041bb22 jge 0x41bb40 | 0x0041bb24 mov eax, 2 | eax = 2; 0x0041bb29 cmp r14, 0xffffffffffff7fff | | if (r14 > 0xffffffffffff7fff) { 0x0041bb30 jg 0x41bb69 | goto label_3; | } 0x0041bb32 xor eax, eax | eax = 0; 0x0041bb34 cmp r14, 0xffffffff80000000 | 0x0041bb3b setl al | al = (r14 < 0xffffffff80000000) ? 1 : 0; 0x0041bb3e jmp 0x41bb55 | | } else { 0x0041bb40 cmp r14, 0x8000 | | if (r14 < 0x8000) { 0x0041bb47 jl 0x41bb5e | goto label_4; | } 0x0041bb49 xor eax, eax | eax = 0; 0x0041bb4b cmp r14, 0x7fffffff | 0x0041bb52 setg al | al = (r14 > 0x7fffffff) ? 1 : 0; | } 0x0041bb55 lea eax, [rax*4 + 4] | eax = rax*4 + 4; 0x0041bb5c jmp 0x41bb69 | goto label_3; | label_4: 0x0041bb5e xor eax, eax | eax = 0; 0x0041bb60 cmp r14, 0x7f | 0x0041bb64 setg al | al = (r14 > 0x7f) ? 1 : 0; 0x0041bb67 inc eax | eax++; | label_3: 0x0041bb69 mov dword [rbx + 0x10], eax | *((rbx + 0x10)) = eax; 0x0041bb6c mov eax, eax | 0x0041bb6e imul rsi, rax | rsi *= rax; 0x0041bb72 cmp rsi, 0x55555550 | | if (rsi > 0x55555550) { 0x0041bb79 ja 0x41bc45 | goto label_5; | } 0x0041bb7f xor eax, eax | eax = 0; 0x0041bb81 test rsi, rsi | | if (rsi == 0) { 0x0041bb84 je 0x41bb9f | goto label_0; | } 0x0041bb86 nop word cs:[rax + rax] | | do { 0x0041bb90 lea rdx, [rax + 3] | rdx = rax + 3; 0x0041bb94 shr rdx, 1 | rdx >>= 1; 0x0041bb97 add rax, rdx | rax += rdx; 0x0041bb9a cmp rax, rsi | 0x0041bb9d jb 0x41bb90 | | } while (rax < rsi); | label_0: 0x0041bb9f mov qword [rbx + 0x18], rax | *((rbx + 0x18)) = rax; 0x0041bba3 mov rdx, qword [rcx] | rdx = *(rcx); 0x0041bba6 mov rdi, rcx | rdi = rcx; 0x0041bba9 mov rsi, rax | rsi = rax; 0x0041bbac call qword [rdx + 0x10] | rax = uint64_t (*rdx + 0x10)() (); 0x0041bbaf mov qword [rbx], rax | *(rbx) = rax; 0x0041bbb2 mov ecx, dword [rbx + 0x10] | ecx = *((rbx + 0x10)); 0x0041bbb5 dec ecx | ecx--; 0x0041bbb7 cmp ecx, 7 | | if (ecx > 7) { 0x0041bbba ja 0x41bc3d | goto label_2; | } | /* switch table (8 cases) at 0x460370 */ 0x0041bbc0 jmp qword [rcx*8 + 0x460370] | 0x0041bbc7 cmp qword [rbx + 8], 0 | | if (*((rbx + 8)) == 0) { 0x0041bbcc je 0x41bc3d | goto label_2; | } 0x0041bbce xor ecx, ecx | ecx = 0; | do { 0x0041bbd0 mov byte [rax + rcx], r14b | *((rax + rcx)) = r14b; 0x0041bbd4 inc rcx | rcx++; 0x0041bbd7 cmp rcx, qword [rbx + 8] | 0x0041bbdb jb 0x41bbd0 | | } while (rcx < *((rbx + 8))); 0x0041bbdd jmp 0x41bc3d | goto label_2; 0x0041bbdf cmp qword [rbx + 8], 0 | | if (*((rbx + 8)) == 0) { 0x0041bbe4 je 0x41bc3d | goto label_2; | } 0x0041bbe6 xor ecx, ecx | ecx = 0; 0x0041bbe8 nop dword [rax + rax] | | do { 0x0041bbf0 mov word [rax + rcx*2], r14w | *((rax + rcx*2)) = r14w; 0x0041bbf5 inc rcx | rcx++; 0x0041bbf8 cmp rcx, qword [rbx + 8] | 0x0041bbfc jb 0x41bbf0 | | } while (rcx < *((rbx + 8))); 0x0041bbfe jmp 0x41bc3d | goto label_2; 0x0041bc00 cmp qword [rbx + 8], 0 | | if (*((rbx + 8)) == 0) { 0x0041bc05 je 0x41bc3d | goto label_2; | } 0x0041bc07 xor ecx, ecx | ecx = 0; 0x0041bc09 nop dword [rax] | | do { 0x0041bc10 mov dword [rax + rcx*4], r14d | *((rax + rcx*4)) = r14d; 0x0041bc14 inc rcx | rcx++; 0x0041bc17 cmp rcx, qword [rbx + 8] | 0x0041bc1b jb 0x41bc10 | | } while (rcx < *((rbx + 8))); 0x0041bc1d jmp 0x41bc3d | goto label_2; 0x0041bc1f cmp qword [rbx + 8], 0 | | if (*((rbx + 8)) == 0) { 0x0041bc24 je 0x41bc3d | goto label_2; | } 0x0041bc26 xor ecx, ecx | ecx = 0; 0x0041bc28 nop dword [rax + rax] | | do { 0x0041bc30 mov qword [rax + rcx*8], r14 | *((rax + rcx*8)) = r14; 0x0041bc34 inc rcx | rcx++; 0x0041bc37 cmp rcx, qword [rbx + 8] | 0x0041bc3b jb 0x41bc30 | | } while (rcx < *((rbx + 8))); | label_2: 0x0041bc3d add rsp, 8 | 0x0041bc41 pop rbx | 0x0041bc42 pop r14 | 0x0041bc44 ret | return rax; | label_5: 0x0041bc45 mov rax, rsi | rax = rsi; 0x0041bc48 jmp 0x41bb9f | goto label_0; | }