; assembly | /* r2dec pseudo code output */ | /* balber_berutil.t/assume @ 0x476b80 */ | #include | ; (fcn) method.BloombergLP::bdldfp::DecimalImpUtil.decompose_int__unsigned_long_long__int__BloombergLP::bdldfp::DecimalImpUtil_IntelDfp::ValueType64_ () | int64_t method_BloombergLP::bdldfp::DecimalImpUtil_decompose_int_unsigned_long_long_int_BloombergLP::bdldfp::DecimalImpUtil_IntelDfp::ValueType64_ (int64_t arg4, int64_t arg3, int64_t arg2, int64_t arg1) { | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdldfp::DecimalImpUtil::decompose(int*, unsigned long long*, int*, BloombergLP::bdldfp::DecimalImpUtil_IntelDfp::ValueType64) */ 0x00476b80 push r15 | 0x00476b82 push r14 | 0x00476b84 push r12 | 0x00476b86 push rbx | 0x00476b87 push rax | 0x00476b88 mov rbx, rcx | rbx = rcx; 0x00476b8b mov r14, rdx | r14 = rdx; 0x00476b8e mov r15, rsi | r15 = rsi; 0x00476b91 mov r12, rdi | r12 = rdi; 0x00476b94 mov rdi, rcx | rdi = rcx; 0x00476b97 call 0x489c30 | _bid64_class (); 0x00476b9c cdqe | rax = (int64_t) eax; 0x00476b9e mov eax, dword [rax*4 + 0x50a110] | eax = *((rax*4 + 0x50a110)); 0x00476ba5 xor ecx, ecx | ecx = 0; 0x00476ba7 test rbx, rbx | 0x00476baa setns cl | __asm ("setns cl"); 0x00476bad lea ecx, [rcx + rcx - 1] | ecx = rcx + rcx - 1; 0x00476bb1 mov dword [r12], ecx | *(r12) = ecx; 0x00476bb5 movabs rcx, 0x6000000000000000 | rcx = 0x6000000000000000; 0x00476bbf mov rdx, rbx | rdx = rbx; 0x00476bc2 and rdx, rcx | rdx &= rcx; 0x00476bc5 cmp rdx, rcx | | if (rdx == rcx) { 0x00476bc8 jne 0x476c13 | 0x00476bca movabs rcx, 0x7800000000000000 | rcx = 0x7800000000000000; 0x00476bd4 movabs rdx, 0x7ffffffffffff | rdx = 0x7ffffffffffff; 0x00476bde and rdx, rbx | rdx &= rbx; 0x00476be1 movabs rsi, 0x1fffffffffffff | rsi = 0x1fffffffffffff; 0x00476beb lea rdx, [rdx + rsi + 1] | rdx = rdx + rsi + 1; 0x00476bf0 mov rsi, rbx | rsi = rbx; 0x00476bf3 and rsi, rcx | rsi &= rcx; 0x00476bf6 shr rbx, 0x33 | rbx >>= 0x33; 0x00476bfa and ebx, 0x3ff | ebx &= 0x3ff; 0x00476c00 mov qword [r15], rdx | *(r15) = rdx; 0x00476c03 cmp rsi, rcx | | if (rsi != rcx) { 0x00476c06 je 0x476c0e | 0x00476c08 add ebx, 0xfffffe72 | ebx += 0xfffffe72; | } 0x00476c0e mov dword [r14], ebx | *(r14) = ebx; 0x00476c11 jmp 0x476c39 | | } else { 0x00476c13 mov rcx, rbx | rcx = rbx; 0x00476c16 shr rcx, 0x35 | rcx >>= 0x35; 0x00476c1a and ecx, 0x3ff | ecx &= 0x3ff; 0x00476c20 add ecx, 0xfffffe72 | ecx += 0xfffffe72; 0x00476c26 mov dword [r14], ecx | *(r14) = ecx; 0x00476c29 movabs rcx, 0x1fffffffffffff | rcx = 0x1fffffffffffff; 0x00476c33 and rcx, rbx | rcx &= rbx; 0x00476c36 mov qword [r15], rcx | *(r15) = rcx; | } 0x00476c39 add rsp, 8 | 0x00476c3d pop rbx | 0x00476c3e pop r12 | 0x00476c40 pop r14 | 0x00476c42 pop r15 | 0x00476c44 ret | return rax; | }