; assembly | /* r2dec pseudo code output */ | /* bdlt_calendar.t/none @ 0x451610 */ | #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&) */ 0x00451610 push r15 | 0x00451612 push r14 | 0x00451614 push r13 | 0x00451616 push r12 | 0x00451618 push rbx | 0x00451619 sub rsp, 0x10 | 0x0045161d mov r14, rdx | r14 = rdx; 0x00451620 mov r15, rsi | r15 = rsi; 0x00451623 mov r12, rdi | r12 = rdi; 0x00451626 xor edi, edi | edi = 0; 0x00451628 test rsi, rsi | 0x0045162b sete dil | dil = (rsi == 0) ? 1 : 0; 0x0045162f mov esi, 0x494ff5 | esi = 0x494ff5; 0x00451634 mov edx, 0x2ac | edx = 0x2ac; 0x00451639 call 0x404090 | (anonymousnamespace)::aSsErT(bool,char const*,int) (); 0x0045163e mov byte [rsp + 8], 0 | *((rsp + 8)) = 0; 0x00451643 mov r13, qword [r12] | r13 = *(r12); 0x00451647 movsx rbx, byte [r13] | rbx = *(r13); 0x0045164c call 0x403ab0 | rax = ctype_b_loc (); 0x00451651 mov rcx, qword [rax] | rcx = *(rax); 0x00451654 test byte [rcx + rbx*2 + 1], 2 | | if ((*((rcx + rbx*2 + 1)) & 2) == 0) { 0x00451659 je 0x4516d6 | goto label_0; | } 0x0045165b inc r13 | r13++; 0x0045165e xor esi, esi | esi = 0; 0x00451660 mov edx, 1 | edx = 1; 0x00451665 nop word cs:[rax + rax] | 0x0045166f nop | | do { 0x00451670 movsx edi, bl | edi = (int32_t) bl; 0x00451673 add edi, 0xffffff9f | edi += 0xffffff9f; 0x00451676 cmp edi, 0x16 | | if (edi > 0x16) { 0x00451679 ja 0x4516e8 | goto label_1; | } 0x0045167b mov cl, 1 | cl = 1; | /* switch table (23 cases) at 0x494800 */ 0x0045167d jmp qword [rdi*8 + 0x494800] | 0x00451684 mov cl, 7 | cl = 7; 0x00451686 jmp 0x4516a0 | goto label_2; 0x00451688 mov cl, 6 | cl = 6; 0x0045168a jmp 0x4516a0 | goto label_2; 0x0045168c mov cl, 2 | cl = 2; 0x0045168e jmp 0x4516a0 | goto label_2; 0x00451690 mov cl, 5 | cl = 5; 0x00451692 jmp 0x4516a0 | goto label_2; 0x00451694 mov cl, 3 | cl = 3; 0x00451696 jmp 0x4516a0 | goto label_2; 0x00451698 mov cl, 4 | cl = 4; 0x0045169a nop word [rax + rax] | | label_2: 0x004516a0 movzx esi, sil | esi = (int32_t) sil; 0x004516a4 popcnt edi, esi | __asm ("popcnt edi, esi"); 0x004516a8 mov bl, 1 | bl = 1; 0x004516aa shl bl, cl | bl <<= cl; 0x004516ac or sil, bl | sil |= bl; 0x004516af mov byte [rsp + 8], sil | *((rsp + 8)) = sil; 0x004516b4 movzx ecx, sil | ecx = (int32_t) sil; 0x004516b8 popcnt ecx, ecx | __asm ("popcnt ecx, ecx"); 0x004516bc cmp edi, ecx | | if (edi >= ecx) { 0x004516be jae 0x4516e8 | goto label_1; | } 0x004516c0 mov qword [r12], r13 | *(r12) = r13; 0x004516c4 movsx rbx, byte [r13] | rbx = *(r13); 0x004516c9 mov rcx, qword [rax] | rcx = *(rax); 0x004516cc inc r13 | r13++; 0x004516cf test byte [rcx + rbx*2 + 1], 2 | 0x004516d4 jne 0x451670 | | } while ((*((rcx + rbx*2 + 1)) & 2) != 0); | do { | label_0: 0x004516d6 lea rdx, [rsp + 8] | 0x004516db mov rdi, r15 | 0x004516de mov rsi, r14 | 0x004516e1 call 0x4549b0 | BloombergLP::bdlt::PackedCalendar::addWeekendDaysTransition(BloombergLP::bdlt::Dateconst&,BloombergLP::bdlt::DayOfWeekSetconst&) (r15, r14, rsp + 8); 0x004516e6 xor edx, edx | edx = 0; | label_1: 0x004516e8 mov eax, edx | eax = edx; 0x004516ea add rsp, 0x10 | 0x004516ee pop rbx | 0x004516ef pop r12 | 0x004516f1 pop r13 | 0x004516f3 pop r14 | 0x004516f5 pop r15 | 0x004516f7 ret | return rax; 0x004516f8 mov qword [r12], r13 | *(r12) = r13; 0x004516fc mov byte [rsp + 8], 0 | *((rsp + 8)) = 0; 0x00451701 jmp 0x4516d6 | | } while (1); | }