; assembly | /* r2dec pseudo code output */ | /* balber_berutil.t/none @ 0x476be0 */ | #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) */ 0x00476be0 push r15 | 0x00476be2 push r14 | 0x00476be4 push r12 | 0x00476be6 push rbx | 0x00476be7 push rax | 0x00476be8 mov rbx, rcx | rbx = rcx; 0x00476beb mov r14, rdx | r14 = rdx; 0x00476bee mov r15, rsi | r15 = rsi; 0x00476bf1 mov r12, rdi | r12 = rdi; 0x00476bf4 mov rdi, rcx | rdi = rcx; 0x00476bf7 call 0x48a270 | eax = _bid64_class (); 0x00476bfc mov ecx, eax | ecx = eax; 0x00476bfe mov eax, 0xffffffff | eax = 0xffffffff; 0x00476c03 cmp ecx, 9 | | if (ecx <= 9) { 0x00476c06 ja 0x476c12 | 0x00476c08 movsxd rax, ecx | rax = (int64_t) ecx; 0x00476c0b mov eax, dword [rax*4 + 0x50a780] | eax = *((rax*4 + 0x50a780)); | } 0x00476c12 xor ecx, ecx | ecx = 0; 0x00476c14 test rbx, rbx | 0x00476c17 setns cl | __asm ("setns cl"); 0x00476c1a lea ecx, [rcx + rcx - 1] | ecx = rcx + rcx - 1; 0x00476c1e mov dword [r12], ecx | *(r12) = ecx; 0x00476c22 movabs rcx, 0x6000000000000000 | rcx = 0x6000000000000000; 0x00476c2c mov rdx, rbx | rdx = rbx; 0x00476c2f and rdx, rcx | rdx &= rcx; 0x00476c32 cmp rdx, rcx | | if (rdx == rcx) { 0x00476c35 jne 0x476c80 | 0x00476c37 movabs rcx, 0x7800000000000000 | rcx = 0x7800000000000000; 0x00476c41 movabs rdx, 0x7ffffffffffff | rdx = 0x7ffffffffffff; 0x00476c4b and rdx, rbx | rdx &= rbx; 0x00476c4e movabs rsi, 0x1fffffffffffff | rsi = 0x1fffffffffffff; 0x00476c58 lea rdx, [rdx + rsi + 1] | rdx = rdx + rsi + 1; 0x00476c5d mov rsi, rbx | rsi = rbx; 0x00476c60 and rsi, rcx | rsi &= rcx; 0x00476c63 shr rbx, 0x33 | rbx >>= 0x33; 0x00476c67 and ebx, 0x3ff | ebx &= 0x3ff; 0x00476c6d mov qword [r15], rdx | *(r15) = rdx; 0x00476c70 cmp rsi, rcx | | if (rsi != rcx) { 0x00476c73 je 0x476c7b | 0x00476c75 add ebx, 0xfffffe72 | ebx += 0xfffffe72; | } 0x00476c7b mov dword [r14], ebx | *(r14) = ebx; 0x00476c7e jmp 0x476ca6 | | } else { 0x00476c80 mov rcx, rbx | rcx = rbx; 0x00476c83 shr rcx, 0x35 | rcx >>= 0x35; 0x00476c87 and ecx, 0x3ff | ecx &= 0x3ff; 0x00476c8d add ecx, 0xfffffe72 | ecx += 0xfffffe72; 0x00476c93 mov dword [r14], ecx | *(r14) = ecx; 0x00476c96 movabs rcx, 0x1fffffffffffff | rcx = 0x1fffffffffffff; 0x00476ca0 and rcx, rbx | rcx &= rbx; 0x00476ca3 mov qword [r15], rcx | *(r15) = rcx; | } 0x00476ca6 add rsp, 8 | 0x00476caa pop rbx | 0x00476cab pop r12 | 0x00476cad pop r14 | 0x00476caf pop r15 | 0x00476cb1 ret | return rax; | }