; assembly | /* r2dec pseudo code output */ | /* bslmt_sluice.t/none @ 0x406680 */ | #include | ; (fcn) method.int_BloombergLP::bslmt::ChronoUtil::timedWait_BloombergLP::bslmt::TimedSemaphore__std::__1::chrono::system_clock__std::__1::chrono::duration_long_long__std::__1.ratio_1l__1000000l______BloombergLP::bslmt::TimedSemaphore__std::__1::chrono::time_po () | uint64_t method_int_BloombergLP::bslmt::ChronoUtil::timedWait_BloombergLP::bslmt::TimedSemaphore_std::_1::chrono::system_clock_std::_1::chrono::duration_long_long_std::_1_ratio_1l_1000000l_BloombergLP::bslmt::TimedSemaphore_std::_1::chrono::time_po (int64_t arg2, uint32_t arg1) { | int64_t var_8h; | int64_t var_18h; | int64_t var_20h; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::bslmt::ChronoUtil::timedWait > >(BloombergLP::bslmt::TimedSemaphore*, std::__1::chrono::time_point > > const&) */ 0x00406680 push rbp | 0x00406681 push r15 | 0x00406683 push r14 | 0x00406685 push r13 | 0x00406687 push r12 | 0x00406689 push rbx | 0x0040668a sub rsp, 0x28 | 0x0040668e mov rbp, rsi | 0x00406691 mov r13, rdi | r13 = rdi; 0x00406694 cmp dword [rdi + 0x20], 0 | | if (*((rdi + 0x20)) == 0) { 0x00406698 je 0x40677a | goto label_0; | } 0x0040669e call 0x4038e0 | rax = std::_1::chrono::system_clock::now() (); 0x004066a3 mov rbx, rax | rbx = rax; 0x004066a6 mov eax, 0xffffffff | eax = 0xffffffff; 0x004066ab cmp rbx, qword [rbp] | | if (rbx >= *(rbp)) { 0x004066af jge 0x406824 | goto label_1; | } 0x004066b5 movabs r14, 0x431bde82d7b634db | r14 = 0x431bde82d7b634db; 0x004066bf lea r15, [rsp + 0x18] | r15 = rsp + 0x18; 0x004066c4 mov r12, rsp | r12 = rsp; 0x004066c7 nop word [rax + rax] | | do { 0x004066d0 mov eax, dword [r13 + 0x20] | eax = *((r13 + 0x20)); 0x004066d4 test eax, eax | | if (eax != 0) { 0x004066d6 je 0x4066f0 | 0x004066d8 cmp eax, 1 | | if (eax != 1) { 0x004066db jne 0x406700 | goto label_2; | } 0x004066dd call 0x42dc50 | BloombergLP::bsls::SystemTime::nowMonotonicClock() (); 0x004066e2 jmp 0x4066f5 | | } else { 0x004066f0 call 0x42dce0 | eax = BloombergLP::bsls::SystemTime::nowRealtimeClock() (); | } 0x004066f5 jmp 0x406704 | goto label_3; | label_2: 0x00406700 xor edx, edx | edx = 0; 0x00406702 xor eax, eax | eax = 0; | label_3: 0x00406704 mov qword [rsp + 0x18], rax | *((rsp + 0x18)) = rax; 0x00406709 mov dword [rsp + 0x20], edx | *((rsp + 0x20)) = edx; 0x0040670d mov rcx, qword [rbp] | rcx = *(rbp); 0x00406711 sub rcx, rbx | rcx -= rbx; 0x00406714 mov rax, rcx | rax = rcx; 0x00406717 imul r14 | rdx:rax = rax * r14; 0x0040671a mov rax, rdx | rax = rdx; 0x0040671d shr rax, 0x3f | rax >>= 0x3f; 0x00406721 sar rdx, 0x12 | rdx >>= 0x12; 0x00406725 add rdx, rax | rdx += rax; 0x00406728 imul eax, edx, 0xfff0bdc0 | eax = edx * 0xfff0bdc0; 0x0040672e add ecx, eax | ecx += eax; 0x00406730 imul eax, ecx, 0x3e8 | eax = ecx * 0x3e8; 0x00406736 mov rdi, r15 | 0x00406739 mov rsi, rdx | 0x0040673c mov edx, eax | 0x0040673e call 0x42de00 | rax = BloombergLP::bsls::TimeInterval::addInterval(long long,int) (r15, rdx, eax); 0x00406743 movups xmm0, xmmword [rax] | __asm ("movups xmm0, xmmword [rax]"); 0x00406746 movaps xmmword [rsp], xmm0 | *(rsp) = xmm0; 0x0040674a mov rdi, r13 | 0x0040674d mov rsi, r12 | 0x00406750 call 0x4078f0 | eax = BloombergLP::bslmt::TimedSemaphoreImpl::timedWait(BloombergLP::bsls::TimeIntervalconst&) (r13, r12); 0x00406755 cmp eax, 0xffffffff | | if (eax != 0xffffffff) { 0x00406758 jne 0x406824 | goto label_1; | } 0x0040675e call 0x4038e0 | rax = std::_1::chrono::system_clock::now() (); 0x00406763 mov rbx, rax | rbx = rax; 0x00406766 cmp rax, qword [rbp] | 0x0040676a jl 0x4066d0 | | } while (rax < *(rbp)); 0x00406770 mov eax, 0xffffffff | eax = 0xffffffff; 0x00406775 jmp 0x406824 | goto label_1; | label_0: 0x0040677a mov rcx, qword [rbp] | rcx = *(rbp); 0x0040677e movabs rdx, 0x431bde82d7b634db | rdx = 0x431bde82d7b634db; 0x00406788 mov rax, rcx | rax = rcx; 0x0040678b imul rdx | rdx:rax = rax * rdx; 0x0040678e mov rax, rdx | rax = rdx; 0x00406791 shr rax, 0x3f | rax >>= 0x3f; 0x00406795 sar rdx, 0x12 | rdx >>= 0x12; 0x00406799 add rdx, rax | rdx += rax; 0x0040679c imul eax, edx, 0xfff0bdc0 | eax = edx * 0xfff0bdc0; 0x004067a2 add ecx, eax | ecx += eax; 0x004067a4 imul eax, ecx, 0x3e8 | eax = ecx * 0x3e8; 0x004067aa mov qword [rsp], rdx | *(rsp) = rdx; 0x004067ae lea ecx, [rax + 0x3b9ac9ff] | ecx = rax + 0x3b9ac9ff; 0x004067b4 cmp ecx, 0x773593ff | | if (ecx >= 0x773593ff) { 0x004067ba jb 0x4067e5 | 0x004067bc movsxd rcx, eax | rcx = (int64_t) eax; 0x004067bf imul rcx, rcx, 0x44b82fa1 | rcx *= 0x44b82fa1; 0x004067c6 mov rsi, rcx | rsi = rcx; 0x004067c9 shr rsi, 0x3f | rsi >>= 0x3f; 0x004067cd sar rcx, 0x3c | rcx >>= 0x3c; 0x004067d1 add ecx, esi | ecx += esi; 0x004067d3 movsxd rcx, ecx | rcx = (int64_t) ecx; 0x004067d6 add rdx, rcx | rdx += rcx; 0x004067d9 mov qword [rsp], rdx | *(rsp) = rdx; 0x004067dd imul ecx, ecx, 0x3b9aca00 | ecx *= 0x3b9aca00; 0x004067e3 sub eax, ecx | eax -= ecx; | } 0x004067e5 mov dword [rsp + 8], eax | *((rsp + 8)) = eax; 0x004067e9 test rdx, rdx | | if (rdx > 0) { 0x004067ec jle 0x406800 | 0x004067ee test eax, eax | | if (eax >= 0) { 0x004067f0 jns 0x406819 | goto label_4; | } 0x004067f2 dec rdx | rdx--; 0x004067f5 mov qword [rsp], rdx | *(rsp) = rdx; 0x004067f9 add eax, 0x3b9aca00 | eax += 0x3b9aca00; 0x004067fe jmp 0x406815 | | } else { 0x00406800 test eax, eax | | if (eax <= 0) { 0x00406802 jle 0x406819 | goto label_4; | } 0x00406804 test rdx, rdx | | if (rdx == 0) { 0x00406807 je 0x406819 | goto label_4; | } 0x00406809 inc rdx | rdx++; 0x0040680c mov qword [rsp], rdx | *(rsp) = rdx; 0x00406810 add eax, 0xc4653600 | eax += 0xc4653600; | } 0x00406815 mov dword [rsp + 8], eax | *((rsp + 8)) = eax; | label_4: 0x00406819 mov rsi, rsp | 0x0040681c mov rdi, r13 | 0x0040681f call 0x4078f0 | BloombergLP::bslmt::TimedSemaphoreImpl::timedWait(BloombergLP::bsls::TimeIntervalconst&) (r13, rsp); | label_1: 0x00406824 add rsp, 0x28 | 0x00406828 pop rbx | 0x00406829 pop r12 | 0x0040682b pop r13 | 0x0040682d pop r14 | 0x0040682f pop r15 | 0x00406831 pop rbp | 0x00406832 ret | return rax; | }