; assembly | /* r2dec pseudo code output */ | /* bdlt_calendar.t/none @ 0x451340 */ | #include | ; (fcn) method.int_loadWeekendDaysTransition_BloombergLP::bdlt.Calendar__char_const__BloombergLP::bdlt::Calendar__BloombergLP::bdlt::Date_const_ () | uint64_t method_int_loadWeekendDaysTransition_BloombergLP::bdlt_Calendar_char_const_BloombergLP::bdlt::Calendar_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::Calendar*, BloombergLP::bdlt::Date const&) */ 0x00451340 push r15 | 0x00451342 push r14 | 0x00451344 push r13 | 0x00451346 push r12 | 0x00451348 push rbx | 0x00451349 sub rsp, 0x10 | 0x0045134d mov r14, rdx | r14 = rdx; 0x00451350 mov r15, rsi | r15 = rsi; 0x00451353 mov r12, rdi | r12 = rdi; 0x00451356 xor edi, edi | edi = 0; 0x00451358 test rsi, rsi | 0x0045135b sete dil | dil = (rsi == 0) ? 1 : 0; 0x0045135f mov esi, 0x494ff5 | esi = 0x494ff5; 0x00451364 mov edx, 0x2ac | edx = 0x2ac; 0x00451369 call 0x404090 | (anonymousnamespace)::aSsErT(bool,char const*,int) (); 0x0045136e mov byte [rsp + 8], 0 | *((rsp + 8)) = 0; 0x00451373 mov r13, qword [r12] | r13 = *(r12); 0x00451377 movsx rbx, byte [r13] | rbx = *(r13); 0x0045137c call 0x403ab0 | rax = ctype_b_loc (); 0x00451381 mov rcx, qword [rax] | rcx = *(rax); 0x00451384 test byte [rcx + rbx*2 + 1], 2 | | if ((*((rcx + rbx*2 + 1)) & 2) == 0) { 0x00451389 je 0x451406 | goto label_0; | } 0x0045138b inc r13 | r13++; 0x0045138e xor esi, esi | esi = 0; 0x00451390 mov edx, 1 | edx = 1; 0x00451395 nop word cs:[rax + rax] | 0x0045139f nop | | do { 0x004513a0 movsx edi, bl | edi = (int32_t) bl; 0x004513a3 add edi, 0xffffff9f | edi += 0xffffff9f; 0x004513a6 cmp edi, 0x16 | | if (edi > 0x16) { 0x004513a9 ja 0x451420 | goto label_1; | } 0x004513ab mov cl, 1 | cl = 1; | /* switch table (23 cases) at 0x494690 */ 0x004513ad jmp qword [rdi*8 + 0x494690] | 0x004513b4 mov cl, 7 | cl = 7; 0x004513b6 jmp 0x4513d0 | goto label_2; 0x004513b8 mov cl, 6 | cl = 6; 0x004513ba jmp 0x4513d0 | goto label_2; 0x004513bc mov cl, 2 | cl = 2; 0x004513be jmp 0x4513d0 | goto label_2; 0x004513c0 mov cl, 5 | cl = 5; 0x004513c2 jmp 0x4513d0 | goto label_2; 0x004513c4 mov cl, 3 | cl = 3; 0x004513c6 jmp 0x4513d0 | goto label_2; 0x004513c8 mov cl, 4 | cl = 4; 0x004513ca nop word [rax + rax] | | label_2: 0x004513d0 movzx esi, sil | esi = (int32_t) sil; 0x004513d4 popcnt edi, esi | __asm ("popcnt edi, esi"); 0x004513d8 mov bl, 1 | bl = 1; 0x004513da shl bl, cl | bl <<= cl; 0x004513dc or sil, bl | sil |= bl; 0x004513df mov byte [rsp + 8], sil | *((rsp + 8)) = sil; 0x004513e4 movzx ecx, sil | ecx = (int32_t) sil; 0x004513e8 popcnt ecx, ecx | __asm ("popcnt ecx, ecx"); 0x004513ec cmp edi, ecx | | if (edi >= ecx) { 0x004513ee jae 0x451420 | goto label_1; | } 0x004513f0 mov qword [r12], r13 | *(r12) = r13; 0x004513f4 movsx rbx, byte [r13] | rbx = *(r13); 0x004513f9 mov rcx, qword [rax] | rcx = *(rax); 0x004513fc inc r13 | r13++; 0x004513ff test byte [rcx + rbx*2 + 1], 2 | 0x00451404 jne 0x4513a0 | | } while ((*((rcx + rbx*2 + 1)) & 2) != 0); | do { | label_0: 0x00451406 lea rdx, [rsp + 8] | 0x0045140b mov rdi, r15 | 0x0045140e mov rsi, r14 | 0x00451411 call 0x4549b0 | BloombergLP::bdlt::PackedCalendar::addWeekendDaysTransition(BloombergLP::bdlt::Dateconst&,BloombergLP::bdlt::DayOfWeekSetconst&) (r15, r14, rsp + 8); 0x00451416 mov rdi, r15 | 0x00451419 call 0x4517d0 | BloombergLP::bdlt::Calendar::synchronizeCache() (r15); 0x0045141e xor edx, edx | edx = 0; | label_1: 0x00451420 mov eax, edx | eax = edx; 0x00451422 add rsp, 0x10 | 0x00451426 pop rbx | 0x00451427 pop r12 | 0x00451429 pop r13 | 0x0045142b pop r14 | 0x0045142d pop r15 | 0x0045142f ret | return rax; 0x00451430 mov qword [r12], r13 | *(r12) = r13; 0x00451434 mov byte [rsp + 8], 0 | *((rsp + 8)) = 0; 0x00451439 jmp 0x451406 | | } while (1); | }