; assembly | /* r2dec pseudo code output */ | /* bslmt_condition.t/none @ 0x402c50 */ | #include | ; (fcn) method.int_BloombergLP::bslmt::ChronoUtil::timedWait_BloombergLP::bslmt::Condition__BloombergLP::bslmt::Mutex__std::__1::chrono::steady_clock__std::__1::chrono::duration_long_long__std::__1.ratio_1l__1000000000l______BloombergLP::bslmt::Condition__Bloom () | int64_t method_int_BloombergLP::bslmt::ChronoUtil::timedWait_BloombergLP::bslmt::Condition_BloombergLP::bslmt::Mutex_std::_1::chrono::steady_clock_std::_1::chrono::duration_long_long_std::_1_ratio_1l_1000000000l_BloombergLP::bslmt::Condition_Bloom (int64_t arg3, int64_t arg2, uint32_t arg1) { | int64_t var_8h; | int64_t var_18h; | int64_t var_20h; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::bslmt::ChronoUtil::timedWait > >(BloombergLP::bslmt::Condition*, BloombergLP::bslmt::Mutex*, std::__1::chrono::time_point > > const&) */ 0x00402c50 push rbp | 0x00402c51 push r15 | 0x00402c53 push r14 | 0x00402c55 push r13 | 0x00402c57 push r12 | 0x00402c59 push rbx | 0x00402c5a sub rsp, 0x28 | 0x00402c5e mov rbp, rdx | 0x00402c61 mov r14, rsi | r14 = rsi; 0x00402c64 mov rbx, rdi | rbx = rdi; 0x00402c67 cmp dword [rdi + 0x30], 1 | | if (*((rdi + 0x30)) == 1) { 0x00402c6b jne 0x402cfc | 0x00402c71 mov rcx, qword [rbp] | rcx = *(rbp); 0x00402c75 movabs rdx, 0x112e0be826d694b3 | rdx = 0x112e0be826d694b3; 0x00402c7f mov rax, rcx | rax = rcx; 0x00402c82 imul rdx | rdx:rax = rax * rdx; 0x00402c85 mov rax, rdx | rax = rdx; 0x00402c88 shr rax, 0x3f | rax >>= 0x3f; 0x00402c8c sar rdx, 0x1a | rdx >>= 0x1a; 0x00402c90 add rdx, rax | rdx += rax; 0x00402c93 imul eax, edx, 0xc4653600 | eax = edx * 0xc4653600; 0x00402c99 mov qword [rsp], rdx | *(rsp) = rdx; 0x00402c9d lea esi, [rax + rcx + 0x3b9ac9ff] | esi = rax + rcx + 0x3b9ac9ff; 0x00402ca4 add eax, ecx | eax += ecx; 0x00402ca6 cmp esi, 0x773593ff | | if (esi >= 0x773593ff) { 0x00402cac jb 0x402cd6 | 0x00402cae cdqe | rax = (int64_t) eax; 0x00402cb0 imul rcx, rax, 0x44b82fa1 | rcx = rax * 0x44b82fa1; 0x00402cb7 mov rsi, rcx | rsi = rcx; 0x00402cba shr rsi, 0x3f | rsi >>= 0x3f; 0x00402cbe sar rcx, 0x3c | rcx >>= 0x3c; 0x00402cc2 add ecx, esi | ecx += esi; 0x00402cc4 movsxd rcx, ecx | rcx = (int64_t) ecx; 0x00402cc7 add rdx, rcx | rdx += rcx; 0x00402cca mov qword [rsp], rdx | *(rsp) = rdx; 0x00402cce imul ecx, ecx, 0x3b9aca00 | ecx *= 0x3b9aca00; 0x00402cd4 sub eax, ecx | eax -= ecx; | } 0x00402cd6 mov dword [rsp + 8], eax | *((rsp + 8)) = eax; 0x00402cda test rdx, rdx | | if (rdx <= 0) { 0x00402cdd jle 0x402dca | goto label_0; | } 0x00402ce3 test eax, eax | | if (eax >= 0) { 0x00402ce5 jns 0x402de3 | goto label_1; | } 0x00402ceb dec rdx | rdx--; 0x00402cee mov qword [rsp], rdx | *(rsp) = rdx; 0x00402cf2 add eax, 0x3b9aca00 | eax += 0x3b9aca00; 0x00402cf7 jmp 0x402ddf | goto label_2; | } 0x00402cfc call 0x4014a0 | rax = std::_1::chrono::steady_clock::now() (); 0x00402d01 mov r15, rax | r15 = rax; 0x00402d04 mov eax, 0xffffffff | eax = 0xffffffff; 0x00402d09 cmp r15, qword [rbp] | | if (r15 >= *(rbp)) { 0x00402d0d jge 0x402df1 | goto label_3; | } 0x00402d13 lea r12, [rsp + 0x18] | r12 = rsp + 0x18; 0x00402d18 mov r13, rsp | r13 = rsp; 0x00402d1b nop dword [rax + rax] | | do { 0x00402d20 mov eax, dword [rbx + 0x30] | eax = *((rbx + 0x30)); 0x00402d23 test eax, eax | | if (eax != 0) { 0x00402d25 je 0x402d40 | 0x00402d27 cmp eax, 1 | | if (eax != 1) { 0x00402d2a jne 0x402d50 | goto label_4; | } 0x00402d2c call 0x4035f0 | BloombergLP::bsls::SystemTime::nowMonotonicClock() (); 0x00402d31 jmp 0x402d45 | | } else { 0x00402d40 call 0x403680 | eax = BloombergLP::bsls::SystemTime::nowRealtimeClock() (); | } 0x00402d45 jmp 0x402d54 | goto label_5; | label_4: 0x00402d50 xor edx, edx | edx = 0; 0x00402d52 xor eax, eax | eax = 0; | label_5: 0x00402d54 mov qword [rsp + 0x18], rax | *((rsp + 0x18)) = rax; 0x00402d59 mov dword [rsp + 0x20], edx | *((rsp + 0x20)) = edx; 0x00402d5d mov rcx, qword [rbp] | rcx = *(rbp); 0x00402d61 sub rcx, r15 | rcx -= r15; 0x00402d64 mov rax, rcx | rax = rcx; 0x00402d67 movabs rdx, 0x112e0be826d694b3 | rdx = 0x112e0be826d694b3; 0x00402d71 imul rdx | rdx:rax = rax * rdx; 0x00402d74 mov rax, rdx | rax = rdx; 0x00402d77 shr rax, 0x3f | rax >>= 0x3f; 0x00402d7b sar rdx, 0x1a | rdx >>= 0x1a; 0x00402d7f add rdx, rax | rdx += rax; 0x00402d82 imul eax, edx, 0xc4653600 | eax = edx * 0xc4653600; 0x00402d88 add ecx, eax | ecx += eax; 0x00402d8a mov rdi, r12 | 0x00402d8d mov rsi, rdx | 0x00402d90 mov edx, ecx | 0x00402d92 call 0x4037a0 | rax = BloombergLP::bsls::TimeInterval::addInterval(long long,int) (r12, rdx, ecx); 0x00402d97 movups xmm0, xmmword [rax] | __asm ("movups xmm0, xmmword [rax]"); 0x00402d9a movaps xmmword [rsp], xmm0 | *(rsp) = xmm0; 0x00402d9e mov rdi, rbx | 0x00402da1 mov rsi, r14 | 0x00402da4 mov rdx, r13 | 0x00402da7 call 0x403210 | eax = BloombergLP::bslmt::ConditionImpl::timedWait(BloombergLP::bslmt::Mutex*,BloombergLP::bsls::TimeIntervalconst&) (rbx, r14, r13); 0x00402dac cmp eax, 0xffffffff | | if (eax != 0xffffffff) { 0x00402daf jne 0x402df1 | goto label_3; | } 0x00402db1 call 0x4014a0 | rax = std::_1::chrono::steady_clock::now() (); 0x00402db6 mov r15, rax | r15 = rax; 0x00402db9 cmp rax, qword [rbp] | 0x00402dbd jl 0x402d20 | | } while (rax < *(rbp)); 0x00402dc3 mov eax, 0xffffffff | eax = 0xffffffff; 0x00402dc8 jmp 0x402df1 | goto label_3; | label_0: 0x00402dca test eax, eax | | if (eax > 0) { 0x00402dcc jle 0x402de3 | 0x00402dce test rdx, rdx | | if (rdx == 0) { 0x00402dd1 je 0x402de3 | goto label_1; | } 0x00402dd3 inc rdx | rdx++; 0x00402dd6 mov qword [rsp], rdx | *(rsp) = rdx; 0x00402dda add eax, 0xc4653600 | eax += 0xc4653600; | label_2: 0x00402ddf mov dword [rsp + 8], eax | *((rsp + 8)) = eax; | } | label_1: 0x00402de3 mov rdx, rsp | 0x00402de6 mov rdi, rbx | 0x00402de9 mov rsi, r14 | 0x00402dec call 0x403210 | BloombergLP::bslmt::ConditionImpl::timedWait(BloombergLP::bslmt::Mutex*,BloombergLP::bsls::TimeIntervalconst&) (rbx, r14, rsp); | label_3: 0x00402df1 add rsp, 0x28 | 0x00402df5 pop rbx | 0x00402df6 pop r12 | 0x00402df8 pop r13 | 0x00402dfa pop r14 | 0x00402dfc pop r15 | 0x00402dfe pop rbp | 0x00402dff ret | return rax; | }