; assembly | /* r2dec pseudo code output */ | /* bdlt_calendar.t/assume @ 0x451390 */ | #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&) */ 0x00451390 push r15 | 0x00451392 push r14 | 0x00451394 push r13 | 0x00451396 push r12 | 0x00451398 push rbx | 0x00451399 sub rsp, 0x10 | 0x0045139d mov r14, rdx | r14 = rdx; 0x004513a0 mov r15, rsi | r15 = rsi; 0x004513a3 mov r12, rdi | r12 = rdi; 0x004513a6 xor edi, edi | edi = 0; 0x004513a8 test rsi, rsi | 0x004513ab sete dil | dil = (rsi == 0) ? 1 : 0; 0x004513af mov esi, 0x494967 | esi = 0x494967; 0x004513b4 mov edx, 0x2ac | edx = 0x2ac; 0x004513b9 call 0x404090 | (anonymousnamespace)::aSsErT(bool,char const*,int) (); 0x004513be mov byte [rsp + 8], 0 | *((rsp + 8)) = 0; 0x004513c3 mov r13, qword [r12] | r13 = *(r12); 0x004513c7 movsx rbx, byte [r13] | rbx = *(r13); 0x004513cc call 0x403ab0 | rax = ctype_b_loc (); 0x004513d1 mov rcx, qword [rax] | rcx = *(rax); 0x004513d4 test byte [rcx + rbx*2 + 1], 2 | | if ((*((rcx + rbx*2 + 1)) & 2) == 0) { 0x004513d9 je 0x451456 | goto label_0; | } 0x004513db inc r13 | r13++; 0x004513de xor esi, esi | esi = 0; 0x004513e0 mov edx, 1 | edx = 1; 0x004513e5 nop word cs:[rax + rax] | 0x004513ef nop | | do { 0x004513f0 movsx edi, bl | edi = (int32_t) bl; 0x004513f3 add edi, 0xffffff9f | edi += 0xffffff9f; 0x004513f6 cmp edi, 0x16 | | if (edi > 0x16) { 0x004513f9 ja 0x451470 | goto label_1; | } 0x004513fb mov cl, 1 | cl = 1; | /* switch table (23 cases) at 0x494000 */ 0x004513fd jmp qword [rdi*8 + 0x494000] | 0x00451404 mov cl, 7 | cl = 7; 0x00451406 jmp 0x451420 | goto label_2; 0x00451408 mov cl, 6 | cl = 6; 0x0045140a jmp 0x451420 | goto label_2; 0x0045140c mov cl, 2 | cl = 2; 0x0045140e jmp 0x451420 | goto label_2; 0x00451410 mov cl, 5 | cl = 5; 0x00451412 jmp 0x451420 | goto label_2; 0x00451414 mov cl, 3 | cl = 3; 0x00451416 jmp 0x451420 | goto label_2; 0x00451418 mov cl, 4 | cl = 4; 0x0045141a nop word [rax + rax] | | label_2: 0x00451420 movzx esi, sil | esi = (int32_t) sil; 0x00451424 popcnt edi, esi | __asm ("popcnt edi, esi"); 0x00451428 mov bl, 1 | bl = 1; 0x0045142a shl bl, cl | bl <<= cl; 0x0045142c or sil, bl | sil |= bl; 0x0045142f mov byte [rsp + 8], sil | *((rsp + 8)) = sil; 0x00451434 movzx ecx, sil | ecx = (int32_t) sil; 0x00451438 popcnt ecx, ecx | __asm ("popcnt ecx, ecx"); 0x0045143c cmp edi, ecx | | if (edi >= ecx) { 0x0045143e jae 0x451470 | goto label_1; | } 0x00451440 mov qword [r12], r13 | *(r12) = r13; 0x00451444 movsx rbx, byte [r13] | rbx = *(r13); 0x00451449 mov rcx, qword [rax] | rcx = *(rax); 0x0045144c inc r13 | r13++; 0x0045144f test byte [rcx + rbx*2 + 1], 2 | 0x00451454 jne 0x4513f0 | | } while ((*((rcx + rbx*2 + 1)) & 2) != 0); | do { | label_0: 0x00451456 lea rdx, [rsp + 8] | 0x0045145b mov rdi, r15 | 0x0045145e mov rsi, r14 | 0x00451461 call 0x4549b0 | BloombergLP::bdlt::PackedCalendar::addWeekendDaysTransition(BloombergLP::bdlt::Dateconst&,BloombergLP::bdlt::DayOfWeekSetconst&) (r15, r14, rsp + 8); 0x00451466 mov rdi, r15 | 0x00451469 call 0x451830 | BloombergLP::bdlt::Calendar::synchronizeCache() (r15); 0x0045146e xor edx, edx | edx = 0; | label_1: 0x00451470 mov eax, edx | eax = edx; 0x00451472 add rsp, 0x10 | 0x00451476 pop rbx | 0x00451477 pop r12 | 0x00451479 pop r13 | 0x0045147b pop r14 | 0x0045147d pop r15 | 0x0045147f ret | return rax; 0x00451480 mov qword [r12], r13 | *(r12) = r13; 0x00451484 mov byte [rsp + 8], 0 | *((rsp + 8)) = 0; 0x00451489 jmp 0x451456 | | } while (1); | }