; assembly | /* r2dec pseudo code output */ | /* bslmt_condition.t/none @ 0x402fc0 */ | #include | ; (fcn) method.int_BloombergLP::bslmt::ChronoUtil::timedWait_BloombergLP::bslmt::Condition__BloombergLP::bslmt::Mutex__AnotherClock__std::__1::chrono::duration_long_long__std::__1.ratio_1l__1000000000l______BloombergLP::bslmt::Condition__BloombergLP::bslmt::Mut () | uint64_t method_int_BloombergLP::bslmt::ChronoUtil::timedWait_BloombergLP::bslmt::Condition_BloombergLP::bslmt::Mutex_AnotherClock_std::_1::chrono::duration_long_long_std::_1_ratio_1l_1000000000l_BloombergLP::bslmt::Condition_BloombergLP::bslmt::Mut (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&) */ 0x00402fc0 push rbp | 0x00402fc1 push r15 | 0x00402fc3 push r14 | 0x00402fc5 push r13 | 0x00402fc7 push r12 | 0x00402fc9 push rbx | 0x00402fca sub rsp, 0x28 | 0x00402fce mov rbx, rdx | rbx = rdx; 0x00402fd1 mov r15, rsi | r15 = rsi; 0x00402fd4 mov rbp, rdi | 0x00402fd7 call 0x4014a0 | rax = std::_1::chrono::steady_clock::now() (); 0x00402fdc mov r14, rax | r14 = rax; 0x00402fdf add r14, 0xffffffffffffd8f0 | r14 += 0xffffffffffffd8f0; 0x00402fe6 mov eax, 0xffffffff | eax = 0xffffffff; 0x00402feb cmp r14, qword [rbx] | | if (r14 >= *(rbx)) { 0x00402fee jge 0x4030ad | goto label_0; | } 0x00402ff4 mov r12, rsp | r12 = rsp; 0x00402ff7 lea r13, [rsp + 0x10] | r13 = rsp + 0x10; 0x00402ffc nop dword [rax] | | do { 0x00403000 mov eax, dword [rbp + 0x30] | eax = *((rbp + 0x30)); 0x00403003 test eax, eax | | if (eax != 0) { 0x00403005 je 0x403020 | 0x00403007 cmp eax, 1 | | if (eax != 1) { 0x0040300a jne 0x403030 | goto label_1; | } 0x0040300c call 0x4035f0 | BloombergLP::bsls::SystemTime::nowMonotonicClock() (); 0x00403011 jmp 0x403025 | | } else { 0x00403020 call 0x403680 | eax = BloombergLP::bsls::SystemTime::nowRealtimeClock() (); | } 0x00403025 jmp 0x403034 | goto label_2; | label_1: 0x00403030 xor edx, edx | edx = 0; 0x00403032 xor eax, eax | eax = 0; | label_2: 0x00403034 mov qword [rsp], rax | *(rsp) = rax; 0x00403038 mov dword [rsp + 8], edx | *((rsp + 8)) = edx; 0x0040303c mov rcx, qword [rbx] | rcx = *(rbx); 0x0040303f sub rcx, r14 | rcx -= r14; 0x00403042 mov rax, rcx | rax = rcx; 0x00403045 movabs rdx, 0x112e0be826d694b3 | rdx = 0x112e0be826d694b3; 0x0040304f imul rdx | rdx:rax = rax * rdx; 0x00403052 mov rax, rdx | rax = rdx; 0x00403055 shr rax, 0x3f | rax >>= 0x3f; 0x00403059 sar rdx, 0x1a | rdx >>= 0x1a; 0x0040305d add rdx, rax | rdx += rax; 0x00403060 imul eax, edx, 0xc4653600 | eax = edx * 0xc4653600; 0x00403066 add ecx, eax | ecx += eax; 0x00403068 mov rdi, r12 | 0x0040306b mov rsi, rdx | 0x0040306e mov edx, ecx | 0x00403070 call 0x4037a0 | rax = BloombergLP::bsls::TimeInterval::addInterval(long long,int) (r12, rdx, ecx); 0x00403075 movups xmm0, xmmword [rax] | __asm ("movups xmm0, xmmword [rax]"); 0x00403078 movaps xmmword [rsp + 0x10], xmm0 | *((rsp + 0x10)) = xmm0; 0x0040307d mov rdi, rbp | 0x00403080 mov rsi, r15 | 0x00403083 mov rdx, r13 | 0x00403086 call 0x403210 | eax = BloombergLP::bslmt::ConditionImpl::timedWait(BloombergLP::bslmt::Mutex*,BloombergLP::bsls::TimeIntervalconst&) (rbp, r15, r13); 0x0040308b cmp eax, 0xffffffff | | if (eax != 0xffffffff) { 0x0040308e jne 0x4030ad | goto label_0; | } 0x00403090 call 0x4014a0 | rax = std::_1::chrono::steady_clock::now() (); 0x00403095 mov r14, rax | r14 = rax; 0x00403098 add r14, 0xffffffffffffd8f0 | r14 += 0xffffffffffffd8f0; 0x0040309f cmp r14, qword [rbx] | 0x004030a2 jl 0x403000 | | } while (r14 < *(rbx)); 0x004030a8 mov eax, 0xffffffff | eax = 0xffffffff; | label_0: 0x004030ad add rsp, 0x28 | 0x004030b1 pop rbx | 0x004030b2 pop r12 | 0x004030b4 pop r13 | 0x004030b6 pop r14 | 0x004030b8 pop r15 | 0x004030ba pop rbp | 0x004030bb ret | return rax; | }