; assembly | /* r2dec pseudo code output */ | /* balber_berdecoder.t/none @ 0x46aa70 */ | #include | ; (fcn) method.BloombergLP::bdlt::ProlepticDateImpUtil.numLeapYears_int__int_ () | int64_t method_BloombergLP::bdlt::ProlepticDateImpUtil_numLeapYears_int_int_ (int64_t arg4, int64_t arg3, int64_t arg2, int64_t arg1) { | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlt::ProlepticDateImpUtil::numLeapYears(int, int) */ 0x0046aa70 lea r8d, [rsi + 3] | r8d = rsi + 3; 0x0046aa74 test esi, esi | 0x0046aa76 cmovns r8d, esi | __asm ("cmovns r8d, esi"); 0x0046aa7a sar r8d, 2 | r8d >>= 2; 0x0046aa7e movsxd rax, esi | rax = (int64_t) esi; 0x0046aa81 imul rdx, rax, 0xffffffffae147ae1 | rdx = rax * 0xffffffffae147ae1; 0x0046aa88 mov rsi, rdx | rsi = rdx; 0x0046aa8b shr rsi, 0x3f | rsi >>= 0x3f; 0x0046aa8f sar rdx, 0x25 | rdx >>= 0x25; 0x0046aa93 add edx, esi | edx += esi; 0x0046aa95 imul rsi, rax, 0x51eb851f | rsi = rax * 0x51eb851f; 0x0046aa9c mov rax, rsi | rax = rsi; 0x0046aa9f shr rax, 0x3f | rax >>= 0x3f; 0x0046aaa3 sar rsi, 0x27 | rsi >>= 0x27; 0x0046aaa7 add esi, eax | esi += eax; 0x0046aaa9 lea eax, [rdi - 1] | eax = rdi - 1; 0x0046aaac add edi, 2 | edi += 2; 0x0046aaaf test eax, eax | 0x0046aab1 cmovns edi, eax | __asm ("cmovns edi, eax"); 0x0046aab4 sar edi, 2 | edi >>= 2; 0x0046aab7 movsxd r9, eax | r9 = (int64_t) eax; 0x0046aaba imul rcx, r9, 0x51eb851f | rcx = r9 * 0x51eb851f; 0x0046aac1 mov rax, rcx | rax = rcx; 0x0046aac4 shr rax, 0x3f | rax >>= 0x3f; 0x0046aac8 sar rcx, 0x25 | rcx >>= 0x25; 0x0046aacc add ecx, eax | ecx += eax; 0x0046aace sub ecx, edi | ecx -= edi; 0x0046aad0 imul rax, r9, 0xffffffffae147ae1 | rax = r9 * 0xffffffffae147ae1; 0x0046aad7 mov rdi, rax | rdi = rax; 0x0046aada shr rdi, 0x3f | rdi >>= 0x3f; 0x0046aade sar rax, 0x27 | rax >>= 0x27; 0x0046aae2 add eax, edi | eax += edi; 0x0046aae4 add eax, ecx | eax += ecx; 0x0046aae6 add eax, r8d | eax += r8d; 0x0046aae9 add eax, edx | eax += edx; 0x0046aaeb add eax, esi | eax += esi; 0x0046aaed ret | return rax; | }