; assembly | /* r2dec pseudo code output */ | /* balber_berutil.t/none @ 0x476860 */ | #include | ; (fcn) method.BloombergLP::bdldfp::DecimalImpUtil.decompose_int__unsigned_int__int__BloombergLP::bdldfp::DecimalImpUtil_IntelDfp::ValueType32_ () | int64_t method_BloombergLP::bdldfp::DecimalImpUtil_decompose_int_unsigned_int_int_BloombergLP::bdldfp::DecimalImpUtil_IntelDfp::ValueType32_ (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 int*, int*, BloombergLP::bdldfp::DecimalImpUtil_IntelDfp::ValueType32) */ 0x00476860 push rbp | 0x00476861 push r15 | 0x00476863 push r14 | 0x00476865 push rbx | 0x00476866 push rax | 0x00476867 mov ebp, ecx | 0x00476869 mov r14, rdx | r14 = rdx; 0x0047686c mov r15, rsi | r15 = rsi; 0x0047686f mov rbx, rdi | rbx = rdi; 0x00476872 mov edi, ecx | edi = ecx; 0x00476874 call 0x4857e0 | eax = _bid32_class (); 0x00476879 mov ecx, eax | ecx = eax; 0x0047687b mov eax, 0xffffffff | eax = 0xffffffff; 0x00476880 cmp ecx, 9 | | if (ecx <= 9) { 0x00476883 ja 0x47688f | 0x00476885 movsxd rax, ecx | rax = (int64_t) ecx; 0x00476888 mov eax, dword [rax*4 + 0x50a780] | eax = *((rax*4 + 0x50a780)); | } 0x0047688f mov ecx, ebp | ecx = ebp; 0x00476891 sar ecx, 0x1f | ecx >>= 0x1f; 0x00476894 or ecx, 1 | ecx |= 1; 0x00476897 mov dword [rbx], ecx | *(rbx) = ecx; 0x00476899 mov ecx, ebp | ecx = ebp; 0x0047689b and ecx, 0x60000000 | ecx &= 0x60000000; 0x004768a1 cmp ecx, 0x60000000 | | if (ecx == 0x60000000) { 0x004768a7 jne 0x4768d9 | 0x004768a9 mov edx, ebp | edx = ebp; 0x004768ab and edx, 0x78000000 | edx &= 0x78000000; 0x004768b1 mov ecx, ebp | ecx = ebp; 0x004768b3 and ecx, 0x1fffff | ecx &= 0x1fffff; 0x004768b9 or ecx, 0x800000 | ecx |= 0x800000; 0x004768bf shr ebp, 0x15 | ebp >>= 0x15; 0x004768c2 mov dword [r15], ecx | *(r15) = ecx; 0x004768c5 movzx ecx, bpl | ecx = (int32_t) bpl; 0x004768c9 cmp edx, 0x78000000 | | if (edx != 0x78000000) { 0x004768cf je 0x4768d4 | 0x004768d1 add ecx, 0xffffff9b | ecx += 0xffffff9b; | } 0x004768d4 mov dword [r14], ecx | *(r14) = ecx; 0x004768d7 jmp 0x4768f0 | | } else { 0x004768d9 mov ecx, ebp | ecx = ebp; 0x004768db shr ecx, 0x17 | ecx >>= 0x17; 0x004768de movzx ecx, cl | ecx = (int32_t) cl; 0x004768e1 add ecx, 0xffffff9b | ecx += 0xffffff9b; 0x004768e4 mov dword [r14], ecx | *(r14) = ecx; 0x004768e7 and ebp, 0x7fffff | ebp &= 0x7fffff; 0x004768ed mov dword [r15], ebp | *(r15) = ebp; | } 0x004768f0 add rsp, 8 | 0x004768f4 pop rbx | 0x004768f5 pop r14 | 0x004768f7 pop r15 | 0x004768f9 pop rbp | 0x004768fa ret | return rax; | }