; assembly | /* r2dec pseudo code output */ | /* bdlt_calendar.t/assume @ 0x451670 */ | #include | ; (fcn) method.int_loadWeekendDaysTransition_BloombergLP::bdlt.PackedCalendar__char_const__BloombergLP::bdlt::PackedCalendar__BloombergLP::bdlt::Date_const_ () | uint64_t method_int_loadWeekendDaysTransition_BloombergLP::bdlt_PackedCalendar_char_const_BloombergLP::bdlt::PackedCalendar_BloombergLP::bdlt::Date_const_ (int64_t arg3, int64_t arg2, int64_t arg1) { | int64_t var_8h; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* int loadWeekendDaysTransition(char const**, BloombergLP::bdlt::PackedCalendar*, BloombergLP::bdlt::Date const&) */ 0x00451670 push r15 | 0x00451672 push r14 | 0x00451674 push r13 | 0x00451676 push r12 | 0x00451678 push rbx | 0x00451679 sub rsp, 0x10 | 0x0045167d mov r14, rdx | r14 = rdx; 0x00451680 mov r15, rsi | r15 = rsi; 0x00451683 mov r12, rdi | r12 = rdi; 0x00451686 xor edi, edi | edi = 0; 0x00451688 test rsi, rsi | 0x0045168b sete dil | dil = (rsi == 0) ? 1 : 0; 0x0045168f mov esi, 0x494967 | esi = 0x494967; 0x00451694 mov edx, 0x2ac | edx = 0x2ac; 0x00451699 call 0x404090 | (anonymousnamespace)::aSsErT(bool,char const*,int) (); 0x0045169e mov byte [rsp + 8], 0 | *((rsp + 8)) = 0; 0x004516a3 mov r13, qword [r12] | r13 = *(r12); 0x004516a7 movsx rbx, byte [r13] | rbx = *(r13); 0x004516ac call 0x403ab0 | rax = ctype_b_loc (); 0x004516b1 mov rcx, qword [rax] | rcx = *(rax); 0x004516b4 test byte [rcx + rbx*2 + 1], 2 | | if ((*((rcx + rbx*2 + 1)) & 2) == 0) { 0x004516b9 je 0x451736 | goto label_0; | } 0x004516bb inc r13 | r13++; 0x004516be xor esi, esi | esi = 0; 0x004516c0 mov edx, 1 | edx = 1; 0x004516c5 nop word cs:[rax + rax] | 0x004516cf nop | | do { 0x004516d0 movsx edi, bl | edi = (int32_t) bl; 0x004516d3 add edi, 0xffffff9f | edi += 0xffffff9f; 0x004516d6 cmp edi, 0x16 | | if (edi > 0x16) { 0x004516d9 ja 0x451748 | goto label_1; | } 0x004516db mov cl, 1 | cl = 1; | /* switch table (23 cases) at 0x494170 */ 0x004516dd jmp qword [rdi*8 + 0x494170] | 0x004516e4 mov cl, 7 | cl = 7; 0x004516e6 jmp 0x451700 | goto label_2; 0x004516e8 mov cl, 6 | cl = 6; 0x004516ea jmp 0x451700 | goto label_2; 0x004516ec mov cl, 2 | cl = 2; 0x004516ee jmp 0x451700 | goto label_2; 0x004516f0 mov cl, 5 | cl = 5; 0x004516f2 jmp 0x451700 | goto label_2; 0x004516f4 mov cl, 3 | cl = 3; 0x004516f6 jmp 0x451700 | goto label_2; 0x004516f8 mov cl, 4 | cl = 4; 0x004516fa nop word [rax + rax] | | label_2: 0x00451700 movzx esi, sil | esi = (int32_t) sil; 0x00451704 popcnt edi, esi | __asm ("popcnt edi, esi"); 0x00451708 mov bl, 1 | bl = 1; 0x0045170a shl bl, cl | bl <<= cl; 0x0045170c or sil, bl | sil |= bl; 0x0045170f mov byte [rsp + 8], sil | *((rsp + 8)) = sil; 0x00451714 movzx ecx, sil | ecx = (int32_t) sil; 0x00451718 popcnt ecx, ecx | __asm ("popcnt ecx, ecx"); 0x0045171c cmp edi, ecx | | if (edi >= ecx) { 0x0045171e jae 0x451748 | goto label_1; | } 0x00451720 mov qword [r12], r13 | *(r12) = r13; 0x00451724 movsx rbx, byte [r13] | rbx = *(r13); 0x00451729 mov rcx, qword [rax] | rcx = *(rax); 0x0045172c inc r13 | r13++; 0x0045172f test byte [rcx + rbx*2 + 1], 2 | 0x00451734 jne 0x4516d0 | | } while ((*((rcx + rbx*2 + 1)) & 2) != 0); | do { | label_0: 0x00451736 lea rdx, [rsp + 8] | 0x0045173b mov rdi, r15 | 0x0045173e mov rsi, r14 | 0x00451741 call 0x4549b0 | BloombergLP::bdlt::PackedCalendar::addWeekendDaysTransition(BloombergLP::bdlt::Dateconst&,BloombergLP::bdlt::DayOfWeekSetconst&) (r15, r14, rsp + 8); 0x00451746 xor edx, edx | edx = 0; | label_1: 0x00451748 mov eax, edx | eax = edx; 0x0045174a add rsp, 0x10 | 0x0045174e pop rbx | 0x0045174f pop r12 | 0x00451751 pop r13 | 0x00451753 pop r14 | 0x00451755 pop r15 | 0x00451757 ret | return rax; 0x00451758 mov qword [r12], r13 | *(r12) = r13; 0x0045175c mov byte [rsp + 8], 0 | *((rsp + 8)) = 0; 0x00451761 jmp 0x451736 | | } while (1); | }