; assembly | /* r2dec pseudo code output */ | /* bslmt_condition.t/assume @ 0x403060 */ | #include | ; (fcn) method.int_BloombergLP::bslmt::ChronoUtil::timedWait_BloombergLP::bslmt::Condition__BloombergLP::bslmt::Mutex__HalfClock__std::__1::chrono::duration_long_long__std::__1.ratio_1l__1000000000l______BloombergLP::bslmt::Condition__BloombergLP::bslmt::Mutex () | uint64_t method_int_BloombergLP::bslmt::ChronoUtil::timedWait_BloombergLP::bslmt::Condition_BloombergLP::bslmt::Mutex_HalfClock_std::_1::chrono::duration_long_long_std::_1_ratio_1l_1000000000l_BloombergLP::bslmt::Condition_BloombergLP::bslmt::Mutex (uint32_t arg3, int64_t arg2, int64_t arg1) { | int64_t var_8h; | int64_t var_10h; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::bslmt::ChronoUtil::timedWait > >(BloombergLP::bslmt::Condition*, BloombergLP::bslmt::Mutex*, std::__1::chrono::time_point > > const&) */ 0x00403060 push rbp | 0x00403061 push r15 | 0x00403063 push r14 | 0x00403065 push r13 | 0x00403067 push r12 | 0x00403069 push rbx | 0x0040306a sub rsp, 0x28 | 0x0040306e mov rbx, rdx | rbx = rdx; 0x00403071 mov r14, rsi | r14 = rsi; 0x00403074 mov r15, rdi | r15 = rdi; 0x00403077 call 0x4014a0 | rax = std::_1::chrono::steady_clock::now() (); 0x0040307c mov r12, rax | r12 = rax; 0x0040307f shr r12, 0x3f | r12 >>= 0x3f; 0x00403083 add r12, rax | r12 += rax; 0x00403086 sar r12, 1 | r12 >>= 1; 0x00403089 mov eax, 0xffffffff | eax = 0xffffffff; 0x0040308e cmp r12, qword [rbx] | | if (r12 >= *(rbx)) { 0x00403091 jge 0x403131 | goto label_0; | } 0x00403097 mov r13, rsp | r13 = rsp; 0x0040309a lea rbp, [rsp + 0x10] | rbp = rsp + 0x10; 0x0040309f nop | | do { 0x004030a0 cmp dword [r15 + 0x30], 1 | | if (*((r15 + 0x30)) == 1) { 0x004030a5 jne 0x4030b0 | 0x004030a7 call 0x403570 | BloombergLP::bsls::SystemTime::nowMonotonicClock() (); 0x004030ac jmp 0x4030b5 | | } else { 0x004030b0 call 0x403600 | rax = BloombergLP::bsls::SystemTime::nowRealtimeClock() (); | } 0x004030b5 mov qword [rsp], rax | *(rsp) = rax; 0x004030b9 mov dword [rsp + 8], edx | *((rsp + 8)) = edx; 0x004030bd mov rcx, qword [rbx] | rcx = *(rbx); 0x004030c0 sub rcx, r12 | rcx -= r12; 0x004030c3 mov rax, rcx | rax = rcx; 0x004030c6 movabs rdx, 0x112e0be826d694b3 | rdx = 0x112e0be826d694b3; 0x004030d0 imul rdx | rdx:rax = rax * rdx; 0x004030d3 mov rax, rdx | rax = rdx; 0x004030d6 shr rax, 0x3f | rax >>= 0x3f; 0x004030da sar rdx, 0x1a | rdx >>= 0x1a; 0x004030de add rdx, rax | rdx += rax; 0x004030e1 imul eax, edx, 0xc4653600 | eax = edx * 0xc4653600; 0x004030e7 add ecx, eax | ecx += eax; 0x004030e9 mov rdi, r13 | 0x004030ec mov rsi, rdx | 0x004030ef mov edx, ecx | 0x004030f1 call 0x403720 | rax = BloombergLP::bsls::TimeInterval::addInterval(long long,int) (r13, rdx, ecx); 0x004030f6 movups xmm0, xmmword [rax] | __asm ("movups xmm0, xmmword [rax]"); 0x004030f9 movaps xmmword [rsp + 0x10], xmm0 | *((rsp + 0x10)) = xmm0; 0x004030fe mov rdi, r15 | 0x00403101 mov rsi, r14 | 0x00403104 mov rdx, rbp | 0x00403107 call 0x403190 | eax = BloombergLP::bslmt::ConditionImpl::timedWait(BloombergLP::bslmt::Mutex*,BloombergLP::bsls::TimeIntervalconst&) (r15, r14, rbp); 0x0040310c cmp eax, 0xffffffff | | if (eax != 0xffffffff) { 0x0040310f jne 0x403131 | goto label_0; | } 0x00403111 call 0x4014a0 | rax = std::_1::chrono::steady_clock::now() (); 0x00403116 mov r12, rax | r12 = rax; 0x00403119 shr r12, 0x3f | r12 >>= 0x3f; 0x0040311d add r12, rax | r12 += rax; 0x00403120 sar r12, 1 | r12 >>= 1; 0x00403123 cmp r12, qword [rbx] | 0x00403126 jl 0x4030a0 | | } while (r12 < *(rbx)); 0x0040312c mov eax, 0xffffffff | eax = 0xffffffff; | label_0: 0x00403131 add rsp, 0x28 | 0x00403135 pop rbx | 0x00403136 pop r12 | 0x00403138 pop r13 | 0x0040313a pop r14 | 0x0040313c pop r15 | 0x0040313e pop rbp | 0x0040313f ret | return rax; | }