; assembly | /* r2dec pseudo code output */ | /* bslmt_chronoutil.t/assume @ 0x401f00 */ | #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&) */ 0x00401f00 push r15 | 0x00401f02 push r14 | 0x00401f04 push r13 | 0x00401f06 push r12 | 0x00401f08 push rbx | 0x00401f09 sub rsp, 0x10 | 0x00401f0d mov r12, rdi | r12 = rdi; 0x00401f10 cmp dword [rdi], 0 | | if (*(rdi) == 0) { 0x00401f13 je 0x401fa2 | goto label_1; | } 0x00401f19 mov r14, rsi | r14 = rsi; 0x00401f1c call 0x4010e0 | rax = std::_1::chrono::system_clock::now() (); 0x00401f21 cmp rax, qword [r14] | | if (rax >= *(r14)) { 0x00401f24 jge 0x401fa7 | goto label_2; | } 0x00401f2a mov rbx, rax | rbx = rax; 0x00401f2d movabs r13, 0x431bde82d7b634db | r13 = 0x431bde82d7b634db; 0x00401f37 mov r15, rsp | r15 = rsp; 0x00401f3a jmp 0x401f94 | | while (*(r12) != 1) { 0x00401f40 call 0x402360 | rax = BloombergLP::bsls::SystemTime::nowRealtimeClock() (); | label_0: 0x00401f45 mov qword [rsp], rax | *(rsp) = rax; 0x00401f49 mov dword [rsp + 8], edx | *((rsp + 8)) = edx; 0x00401f4d mov rcx, qword [r14] | rcx = *(r14); 0x00401f50 sub rcx, rbx | rcx -= rbx; 0x00401f53 mov rax, rcx | rax = rcx; 0x00401f56 imul r13 | rdx:rax = rax * r13; 0x00401f59 mov rax, rdx | rax = rdx; 0x00401f5c shr rax, 0x3f | rax >>= 0x3f; 0x00401f60 sar rdx, 0x12 | rdx >>= 0x12; 0x00401f64 add rdx, rax | rdx += rax; 0x00401f67 imul eax, edx, 0xfff0bdc0 | eax = edx * 0xfff0bdc0; 0x00401f6d add ecx, eax | ecx += eax; 0x00401f6f imul eax, ecx, 0x3e8 | eax = ecx * 0x3e8; 0x00401f75 mov rdi, r15 | 0x00401f78 mov rsi, rdx | 0x00401f7b mov edx, eax | 0x00401f7d call 0x402480 | BloombergLP::bsls::TimeInterval::addInterval(long long,int) (r15, rdx, eax); 0x00401f82 inc dword [r12 + 4] | *((r12 + 4))++; 0x00401f87 call 0x4010e0 | rax = std::_1::chrono::system_clock::now() (); 0x00401f8c mov rbx, rax | rbx = rax; 0x00401f8f cmp rax, qword [r14] | | if (rax >= *(r14)) { 0x00401f92 jge 0x401fa7 | goto label_2; | } 0x00401f94 cmp dword [r12], 1 | 0x00401f99 jne 0x401f40 | | } 0x00401f9b call 0x4022d0 | BloombergLP::bsls::SystemTime::nowMonotonicClock() (); 0x00401fa0 jmp 0x401f45 | goto label_0; | label_1: 0x00401fa2 inc dword [r12 + 4] | *((r12 + 4))++; | label_2: 0x00401fa7 mov eax, 1 | eax = 1; 0x00401fac add rsp, 0x10 | 0x00401fb0 pop rbx | 0x00401fb1 pop r12 | 0x00401fb3 pop r13 | 0x00401fb5 pop r14 | 0x00401fb7 pop r15 | 0x00401fb9 ret | return rax; | }