; assembly | /* r2dec pseudo code output */ | /* bslmt_sluice.t/none @ 0x4068e0 */ | #include | ; (fcn) method.int_BloombergLP::bslmt::ChronoUtil::timedWait_BloombergLP::bslmt::TimedSemaphore__AnotherClock__std::__1::chrono::duration_long_long__std::__1.ratio_1l__1000000000l______BloombergLP::bslmt::TimedSemaphore__std::__1::chrono::time_point_AnotherCloc () | uint64_t method_int_BloombergLP::bslmt::ChronoUtil::timedWait_BloombergLP::bslmt::TimedSemaphore_AnotherClock_std::_1::chrono::duration_long_long_std::_1_ratio_1l_1000000000l_BloombergLP::bslmt::TimedSemaphore_std::_1::chrono::time_point_AnotherCloc (int64_t arg2, int64_t arg1) { | int64_t var_8h; | int64_t var_10h; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::bslmt::ChronoUtil::timedWait > >(BloombergLP::bslmt::TimedSemaphore*, std::__1::chrono::time_point > > const&) */ 0x004068e0 push rbp | 0x004068e1 push r15 | 0x004068e3 push r14 | 0x004068e5 push r13 | 0x004068e7 push r12 | 0x004068e9 push rbx | 0x004068ea sub rsp, 0x28 | 0x004068ee mov rbx, rsi | rbx = rsi; 0x004068f1 mov r13, rdi | r13 = rdi; 0x004068f4 call 0x403840 | rax = std::_1::chrono::steady_clock::now() (); 0x004068f9 mov rbp, rax | 0x004068fc add rbp, 0xffffffffffffd8f0 | rbp += 0xffffffffffffd8f0; 0x00406903 mov eax, 0xffffffff | eax = 0xffffffff; 0x00406908 cmp rbp, qword [rbx] | | if (rbp >= *(rbx)) { 0x0040690b jge 0x4069d0 | goto label_0; | } 0x00406911 movabs r14, 0x112e0be826d694b3 | r14 = 0x112e0be826d694b3; 0x0040691b mov r15, rsp | r15 = rsp; 0x0040691e lea r12, [rsp + 0x10] | r12 = rsp + 0x10; 0x00406923 nop word cs:[rax + rax] | 0x0040692d nop dword [rax] | | do { 0x00406930 mov eax, dword [r13 + 0x20] | eax = *((r13 + 0x20)); 0x00406934 test eax, eax | | if (eax != 0) { 0x00406936 je 0x406950 | 0x00406938 cmp eax, 1 | | if (eax != 1) { 0x0040693b jne 0x406960 | goto label_1; | } 0x0040693d call 0x42dc50 | BloombergLP::bsls::SystemTime::nowMonotonicClock() (); 0x00406942 jmp 0x406955 | | } else { 0x00406950 call 0x42dce0 | eax = BloombergLP::bsls::SystemTime::nowRealtimeClock() (); | } 0x00406955 jmp 0x406964 | goto label_2; | label_1: 0x00406960 xor edx, edx | edx = 0; 0x00406962 xor eax, eax | eax = 0; | label_2: 0x00406964 mov qword [rsp], rax | *(rsp) = rax; 0x00406968 mov dword [rsp + 8], edx | *((rsp + 8)) = edx; 0x0040696c mov rcx, qword [rbx] | rcx = *(rbx); 0x0040696f sub rcx, rbp | rcx -= rbp; 0x00406972 mov rax, rcx | rax = rcx; 0x00406975 imul r14 | rdx:rax = rax * r14; 0x00406978 mov rax, rdx | rax = rdx; 0x0040697b shr rax, 0x3f | rax >>= 0x3f; 0x0040697f sar rdx, 0x1a | rdx >>= 0x1a; 0x00406983 add rdx, rax | rdx += rax; 0x00406986 imul eax, edx, 0xc4653600 | eax = edx * 0xc4653600; 0x0040698c add ecx, eax | ecx += eax; 0x0040698e mov rdi, r15 | 0x00406991 mov rsi, rdx | 0x00406994 mov edx, ecx | 0x00406996 call 0x42de00 | rax = BloombergLP::bsls::TimeInterval::addInterval(long long,int) (r15, rdx, ecx); 0x0040699b movups xmm0, xmmword [rax] | __asm ("movups xmm0, xmmword [rax]"); 0x0040699e movaps xmmword [rsp + 0x10], xmm0 | *((rsp + 0x10)) = xmm0; 0x004069a3 mov rdi, r13 | 0x004069a6 mov rsi, r12 | 0x004069a9 call 0x4078f0 | eax = BloombergLP::bslmt::TimedSemaphoreImpl::timedWait(BloombergLP::bsls::TimeIntervalconst&) (r13, r12); 0x004069ae cmp eax, 0xffffffff | | if (eax != 0xffffffff) { 0x004069b1 jne 0x4069d0 | goto label_0; | } 0x004069b3 call 0x403840 | rax = std::_1::chrono::steady_clock::now() (); 0x004069b8 mov rbp, rax | 0x004069bb add rbp, 0xffffffffffffd8f0 | rbp += 0xffffffffffffd8f0; 0x004069c2 cmp rbp, qword [rbx] | 0x004069c5 jl 0x406930 | | } while (rbp < *(rbx)); 0x004069cb mov eax, 0xffffffff | eax = 0xffffffff; | label_0: 0x004069d0 add rsp, 0x28 | 0x004069d4 pop rbx | 0x004069d5 pop r12 | 0x004069d7 pop r13 | 0x004069d9 pop r14 | 0x004069db pop r15 | 0x004069dd pop rbp | 0x004069de ret | return rax; | }