; assembly | /* r2dec pseudo code output */ | /* balber_berutil.t/assume @ 0x4770a0 */ | #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) */ 0x004770a0 push r15 | 0x004770a2 push r14 | 0x004770a4 push r13 | 0x004770a6 push r12 | 0x004770a8 push rbx | 0x004770a9 mov rbx, r8 | rbx = r8; 0x004770ac mov r15, rcx | r15 = rcx; 0x004770af mov r14, rdx | r14 = rdx; 0x004770b2 mov r12, rsi | r12 = rsi; 0x004770b5 mov r13, rdi | r13 = rdi; 0x004770b8 mov rdi, rcx | rdi = rcx; 0x004770bb mov rsi, r8 | rsi = r8; 0x004770be call 0x4a2490 | _bid128_class (); 0x004770c3 cdqe | rax = (int64_t) eax; 0x004770c5 mov eax, dword [rax*4 + 0x50a110] | eax = *((rax*4 + 0x50a110)); 0x004770cc xor ecx, ecx | ecx = 0; 0x004770ce test rbx, rbx | 0x004770d1 setns cl | __asm ("setns cl"); 0x004770d4 lea ecx, [rcx + rcx - 1] | ecx = rcx + rcx - 1; 0x004770d8 mov dword [r13], ecx | *(r13) = ecx; 0x004770dc movabs rcx, 0x6000000000000000 | rcx = 0x6000000000000000; 0x004770e6 mov rdx, rbx | rdx = rbx; 0x004770e9 and rdx, rcx | rdx &= rcx; 0x004770ec cmp rdx, rcx | | if (rdx == rcx) { 0x004770ef jne 0x477123 | 0x004770f1 movabs rcx, 0x7fffffffffff | rcx = 0x7fffffffffff; 0x004770fb and rcx, rbx | rcx &= rbx; 0x004770fe movabs rdx, 0x20000000000000 | rdx = 0x20000000000000; 0x00477108 or rdx, rcx | rdx |= rcx; 0x0047710b mov qword [r12 + 8], rdx | *((r12 + 8)) = rdx; 0x00477110 mov qword [r12], r15 | *(r12) = r15; 0x00477114 shr rbx, 0x2f | rbx >>= 0x2f; 0x00477118 and ebx, 0x3fff | ebx &= 0x3fff; 0x0047711e mov dword [r14], ebx | *(r14) = ebx; 0x00477121 jmp 0x47714f | | } else { 0x00477123 mov rcx, rbx | rcx = rbx; 0x00477126 shr rcx, 0x31 | rcx >>= 0x31; 0x0047712a and ecx, 0x3fff | ecx &= 0x3fff; 0x00477130 add ecx, 0xffffe7e0 | ecx += 0xffffe7e0; 0x00477136 mov dword [r14], ecx | *(r14) = ecx; 0x00477139 movabs rcx, 0x1ffffffffffff | rcx = 0x1ffffffffffff; 0x00477143 and rcx, rbx | rcx &= rbx; 0x00477146 mov qword [r12 + 8], rcx | *((r12 + 8)) = rcx; 0x0047714b mov qword [r12], r15 | *(r12) = r15; | } 0x0047714f pop rbx | 0x00477150 pop r12 | 0x00477152 pop r13 | 0x00477154 pop r14 | 0x00477156 pop r15 | 0x00477158 ret | return rax; | }