; assembly | /* r2dec pseudo code output */ | /* balber_berutil.t/none @ 0x477130 */ | #include | ; (fcn) method.BloombergLP::bdldfp::DecimalImpUtil.decompose_int__BloombergLP::bdldfp::Uint128__int__BloombergLP::bdldfp::DecimalImpUtil_IntelDfp::ValueType128_ () | int64_t method_BloombergLP::bdldfp::DecimalImpUtil_decompose_int_BloombergLP::bdldfp::Uint128_int_BloombergLP::bdldfp::DecimalImpUtil_IntelDfp::ValueType128_ (int64_t arg5, int64_t arg4, int64_t arg3, int64_t arg2, int64_t arg1) { | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdldfp::DecimalImpUtil::decompose(int*, BloombergLP::bdldfp::Uint128*, int*, BloombergLP::bdldfp::DecimalImpUtil_IntelDfp::ValueType128) */ 0x00477130 push r15 | 0x00477132 push r14 | 0x00477134 push r13 | 0x00477136 push r12 | 0x00477138 push rbx | 0x00477139 mov rbx, r8 | rbx = r8; 0x0047713c mov r15, rcx | r15 = rcx; 0x0047713f mov r14, rdx | r14 = rdx; 0x00477142 mov r12, rsi | r12 = rsi; 0x00477145 mov r13, rdi | r13 = rdi; 0x00477148 mov rdi, rcx | rdi = rcx; 0x0047714b mov rsi, r8 | rsi = r8; 0x0047714e call 0x4a2ad0 | eax = _bid128_class (); 0x00477153 mov ecx, eax | ecx = eax; 0x00477155 mov eax, 0xffffffff | eax = 0xffffffff; 0x0047715a cmp ecx, 9 | | if (ecx <= 9) { 0x0047715d ja 0x477169 | 0x0047715f movsxd rax, ecx | rax = (int64_t) ecx; 0x00477162 mov eax, dword [rax*4 + 0x50a780] | eax = *((rax*4 + 0x50a780)); | } 0x00477169 xor ecx, ecx | ecx = 0; 0x0047716b test rbx, rbx | 0x0047716e setns cl | __asm ("setns cl"); 0x00477171 lea ecx, [rcx + rcx - 1] | ecx = rcx + rcx - 1; 0x00477175 mov dword [r13], ecx | *(r13) = ecx; 0x00477179 movabs rcx, 0x6000000000000000 | rcx = 0x6000000000000000; 0x00477183 mov rdx, rbx | rdx = rbx; 0x00477186 and rdx, rcx | rdx &= rcx; 0x00477189 cmp rdx, rcx | | if (rdx == rcx) { 0x0047718c jne 0x4771c0 | 0x0047718e movabs rcx, 0x7fffffffffff | rcx = 0x7fffffffffff; 0x00477198 and rcx, rbx | rcx &= rbx; 0x0047719b movabs rdx, 0x20000000000000 | rdx = 0x20000000000000; 0x004771a5 or rdx, rcx | rdx |= rcx; 0x004771a8 mov qword [r12 + 8], rdx | *((r12 + 8)) = rdx; 0x004771ad mov qword [r12], r15 | *(r12) = r15; 0x004771b1 shr rbx, 0x2f | rbx >>= 0x2f; 0x004771b5 and ebx, 0x3fff | ebx &= 0x3fff; 0x004771bb mov dword [r14], ebx | *(r14) = ebx; 0x004771be jmp 0x4771ec | | } else { 0x004771c0 mov rcx, rbx | rcx = rbx; 0x004771c3 shr rcx, 0x31 | rcx >>= 0x31; 0x004771c7 and ecx, 0x3fff | ecx &= 0x3fff; 0x004771cd add ecx, 0xffffe7e0 | ecx += 0xffffe7e0; 0x004771d3 mov dword [r14], ecx | *(r14) = ecx; 0x004771d6 movabs rcx, 0x1ffffffffffff | rcx = 0x1ffffffffffff; 0x004771e0 and rcx, rbx | rcx &= rbx; 0x004771e3 mov qword [r12 + 8], rcx | *((r12 + 8)) = rcx; 0x004771e8 mov qword [r12], r15 | *(r12) = r15; | } 0x004771ec pop rbx | 0x004771ed pop r12 | 0x004771ef pop r13 | 0x004771f1 pop r14 | 0x004771f3 pop r15 | 0x004771f5 ret | return rax; | }