; assembly | /* r2dec pseudo code output */ | /* bslmt_chronoutil.t/none @ 0x401e50 */ | #include | ; (fcn) method.int_BloombergLP::bslmt::ChronoUtil::timedWait_TimedWaitTimeout__std::__1::chrono::system_clock__std::__1::chrono::duration_long_long__std::__1.ratio_1l__1000000l______TimedWaitTimeout__std::__1::chrono::time_point_std::__1::chrono::system_clock__ () | uint64_t method_int_BloombergLP::bslmt::ChronoUtil::timedWait_TimedWaitTimeout_std::_1::chrono::system_clock_std::_1::chrono::duration_long_long_std::_1_ratio_1l_1000000l_TimedWaitTimeout_std::_1::chrono::time_point_std::_1::chrono::system_clock_ (int64_t arg2, uint32_t arg1) { | int64_t var_8h; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::bslmt::ChronoUtil::timedWait > >(TimedWaitTimeout*, std::__1::chrono::time_point > > const&) */ 0x00401e50 push r15 | 0x00401e52 push r14 | 0x00401e54 push r13 | 0x00401e56 push r12 | 0x00401e58 push rbx | 0x00401e59 sub rsp, 0x10 | 0x00401e5d mov r12, rdi | r12 = rdi; 0x00401e60 cmp dword [rdi], 0 | | if (*(rdi) == 0) { 0x00401e63 je 0x401f06 | goto label_1; | } 0x00401e69 mov r14, rsi | r14 = rsi; 0x00401e6c call 0x4010e0 | rax = std::_1::chrono::system_clock::now() (); 0x00401e71 cmp rax, qword [r14] | | if (rax >= *(r14)) { 0x00401e74 jge 0x401f0b | goto label_2; | } 0x00401e7a mov rbx, rax | rbx = rax; 0x00401e7d movabs r13, 0x431bde82d7b634db | r13 = 0x431bde82d7b634db; 0x00401e87 mov r15, rsp | r15 = rsp; 0x00401e8a jmp 0x401ee4 | | while (eax == 0) { 0x00401e90 call 0x402550 | rax = BloombergLP::bsls::SystemTime::nowRealtimeClock() (); | label_0: 0x00401e95 mov qword [rsp], rax | *(rsp) = rax; 0x00401e99 mov dword [rsp + 8], edx | *((rsp + 8)) = edx; 0x00401e9d mov rcx, qword [r14] | rcx = *(r14); 0x00401ea0 sub rcx, rbx | rcx -= rbx; 0x00401ea3 mov rax, rcx | rax = rcx; 0x00401ea6 imul r13 | rdx:rax = rax * r13; 0x00401ea9 mov rax, rdx | rax = rdx; 0x00401eac shr rax, 0x3f | rax >>= 0x3f; 0x00401eb0 sar rdx, 0x12 | rdx >>= 0x12; 0x00401eb4 add rdx, rax | rdx += rax; 0x00401eb7 imul eax, edx, 0xfff0bdc0 | eax = edx * 0xfff0bdc0; 0x00401ebd add ecx, eax | ecx += eax; 0x00401ebf imul eax, ecx, 0x3e8 | eax = ecx * 0x3e8; 0x00401ec5 mov rdi, r15 | 0x00401ec8 mov rsi, rdx | 0x00401ecb mov edx, eax | 0x00401ecd call 0x402670 | BloombergLP::bsls::TimeInterval::addInterval(long long,int) (r15, rdx, eax); 0x00401ed2 inc dword [r12 + 4] | *((r12 + 4))++; 0x00401ed7 call 0x4010e0 | rax = std::_1::chrono::system_clock::now() (); 0x00401edc mov rbx, rax | rbx = rax; 0x00401edf cmp rax, qword [r14] | | if (rax >= *(r14)) { 0x00401ee2 jge 0x401f0b | goto label_2; | } 0x00401ee4 mov eax, dword [r12] | eax = *(r12); 0x00401ee8 test eax, eax | 0x00401eea je 0x401e90 | | } 0x00401eec cmp eax, 1 | | if (eax == 1) { 0x00401eef jne 0x401f00 | 0x00401ef1 call 0x4024c0 | eax = BloombergLP::bsls::SystemTime::nowMonotonicClock() (); 0x00401ef6 jmp 0x401e95 | goto label_0; | } 0x00401f00 xor edx, edx | edx = 0; 0x00401f02 xor eax, eax | eax = 0; 0x00401f04 jmp 0x401e95 | goto label_0; | label_1: 0x00401f06 inc dword [r12 + 4] | *((r12 + 4))++; | label_2: 0x00401f0b mov eax, 1 | eax = 1; 0x00401f10 add rsp, 0x10 | 0x00401f14 pop rbx | 0x00401f15 pop r12 | 0x00401f17 pop r13 | 0x00401f19 pop r14 | 0x00401f1b pop r15 | 0x00401f1d ret | return rax; | }