; assembly | /* r2dec pseudo code output */ | /* bslmt_barrier.t/none @ 0x408d80 */ | #include | ; (fcn) method.int_BloombergLP::bslmt::ChronoUtil::timedWait_BloombergLP::bslmt::Barrier__std::__1::chrono::steady_clock__std::__1::chrono::duration_long_long__std::__1.ratio_1l__1000000000l______BloombergLP::bslmt::Barrier__std::__1::chrono::time_point_std::__ () | int64_t method_int_BloombergLP::bslmt::ChronoUtil::timedWait_BloombergLP::bslmt::Barrier_std::_1::chrono::steady_clock_std::_1::chrono::duration_long_long_std::_1_ratio_1l_1000000000l_BloombergLP::bslmt::Barrier_std::_1::chrono::time_point_std::_ (uint32_t arg2, uint32_t arg1) { | int64_t var_8h; | int64_t var_18h; | int64_t var_20h; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::bslmt::ChronoUtil::timedWait > >(BloombergLP::bslmt::Barrier*, std::__1::chrono::time_point > > const&) */ 0x00408d80 push rbp | 0x00408d81 push r15 | 0x00408d83 push r14 | 0x00408d85 push r13 | 0x00408d87 push r12 | 0x00408d89 push rbx | 0x00408d8a sub rsp, 0x28 | 0x00408d8e mov rbp, rsi | 0x00408d91 mov r13, rdi | r13 = rdi; 0x00408d94 cmp dword [rdi + 0x58], 1 | | if (*((rdi + 0x58)) == 1) { 0x00408d98 jne 0x408e29 | 0x00408d9e mov rcx, qword [rbp] | rcx = *(rbp); 0x00408da2 movabs rdx, 0x112e0be826d694b3 | rdx = 0x112e0be826d694b3; 0x00408dac mov rax, rcx | rax = rcx; 0x00408daf imul rdx | rdx:rax = rax * rdx; 0x00408db2 mov rax, rdx | rax = rdx; 0x00408db5 shr rax, 0x3f | rax >>= 0x3f; 0x00408db9 sar rdx, 0x1a | rdx >>= 0x1a; 0x00408dbd add rdx, rax | rdx += rax; 0x00408dc0 imul eax, edx, 0xc4653600 | eax = edx * 0xc4653600; 0x00408dc6 mov qword [rsp], rdx | *(rsp) = rdx; 0x00408dca lea esi, [rax + rcx + 0x3b9ac9ff] | esi = rax + rcx + 0x3b9ac9ff; 0x00408dd1 add eax, ecx | eax += ecx; 0x00408dd3 cmp esi, 0x773593ff | | if (esi >= 0x773593ff) { 0x00408dd9 jb 0x408e03 | 0x00408ddb cdqe | rax = (int64_t) eax; 0x00408ddd imul rcx, rax, 0x44b82fa1 | rcx = rax * 0x44b82fa1; 0x00408de4 mov rsi, rcx | rsi = rcx; 0x00408de7 shr rsi, 0x3f | rsi >>= 0x3f; 0x00408deb sar rcx, 0x3c | rcx >>= 0x3c; 0x00408def add ecx, esi | ecx += esi; 0x00408df1 movsxd rcx, ecx | rcx = (int64_t) ecx; 0x00408df4 add rdx, rcx | rdx += rcx; 0x00408df7 mov qword [rsp], rdx | *(rsp) = rdx; 0x00408dfb imul ecx, ecx, 0x3b9aca00 | ecx *= 0x3b9aca00; 0x00408e01 sub eax, ecx | eax -= ecx; | } 0x00408e03 mov dword [rsp + 8], eax | *((rsp + 8)) = eax; 0x00408e07 test rdx, rdx | | if (rdx <= 0) { 0x00408e0a jle 0x408efd | goto label_0; | } 0x00408e10 test eax, eax | | if (eax >= 0) { 0x00408e12 jns 0x408f16 | goto label_1; | } 0x00408e18 dec rdx | rdx--; 0x00408e1b mov qword [rsp], rdx | *(rsp) = rdx; 0x00408e1f add eax, 0x3b9aca00 | eax += 0x3b9aca00; 0x00408e24 jmp 0x408f12 | goto label_2; | } 0x00408e29 call 0x403660 | rax = std::_1::chrono::steady_clock::now() (); 0x00408e2e mov rbx, rax | rbx = rax; 0x00408e31 mov eax, 0xffffffff | eax = 0xffffffff; 0x00408e36 cmp rbx, qword [rbp] | | if (rbx >= *(rbp)) { 0x00408e3a jge 0x408f21 | goto label_3; | } 0x00408e40 movabs r14, 0x112e0be826d694b3 | r14 = 0x112e0be826d694b3; 0x00408e4a lea r15, [rsp + 0x18] | r15 = rsp + 0x18; 0x00408e4f mov r12, rsp | r12 = rsp; 0x00408e52 nop word cs:[rax + rax] | 0x00408e5c nop dword [rax] | | do { 0x00408e60 mov eax, dword [r13 + 0x58] | eax = *((r13 + 0x58)); 0x00408e64 test eax, eax | | if (eax != 0) { 0x00408e66 je 0x408e80 | 0x00408e68 cmp eax, 1 | | if (eax != 1) { 0x00408e6b jne 0x408e90 | goto label_4; | } 0x00408e6d call 0x42f1e0 | BloombergLP::bsls::SystemTime::nowMonotonicClock() (); 0x00408e72 jmp 0x408e85 | | } else { 0x00408e80 call 0x42f270 | eax = BloombergLP::bsls::SystemTime::nowRealtimeClock() (); | } 0x00408e85 jmp 0x408e94 | goto label_5; | label_4: 0x00408e90 xor edx, edx | edx = 0; 0x00408e92 xor eax, eax | eax = 0; | label_5: 0x00408e94 mov qword [rsp + 0x18], rax | *((rsp + 0x18)) = rax; 0x00408e99 mov dword [rsp + 0x20], edx | *((rsp + 0x20)) = edx; 0x00408e9d mov rcx, qword [rbp] | rcx = *(rbp); 0x00408ea1 sub rcx, rbx | rcx -= rbx; 0x00408ea4 mov rax, rcx | rax = rcx; 0x00408ea7 imul r14 | rdx:rax = rax * r14; 0x00408eaa mov rax, rdx | rax = rdx; 0x00408ead shr rax, 0x3f | rax >>= 0x3f; 0x00408eb1 sar rdx, 0x1a | rdx >>= 0x1a; 0x00408eb5 add rdx, rax | rdx += rax; 0x00408eb8 imul eax, edx, 0xc4653600 | eax = edx * 0xc4653600; 0x00408ebe add ecx, eax | ecx += eax; 0x00408ec0 mov rdi, r15 | 0x00408ec3 mov rsi, rdx | 0x00408ec6 mov edx, ecx | 0x00408ec8 call 0x42f390 | rax = BloombergLP::bsls::TimeInterval::addInterval(long long,int) (r15, rdx, ecx); 0x00408ecd movups xmm0, xmmword [rax] | __asm ("movups xmm0, xmmword [rax]"); 0x00408ed0 movaps xmmword [rsp], xmm0 | *(rsp) = xmm0; 0x00408ed4 mov rdi, r13 | 0x00408ed7 mov rsi, r12 | 0x00408eda call 0x4091d0 | eax = BloombergLP::bslmt::Barrier::timedWait(BloombergLP::bsls::TimeIntervalconst&) (r13, r12); 0x00408edf cmp eax, 0xffffffff | | if (eax != 0xffffffff) { 0x00408ee2 jne 0x408f21 | goto label_3; | } 0x00408ee4 call 0x403660 | rax = std::_1::chrono::steady_clock::now() (); 0x00408ee9 mov rbx, rax | rbx = rax; 0x00408eec cmp rax, qword [rbp] | 0x00408ef0 jl 0x408e60 | | } while (rax < *(rbp)); 0x00408ef6 mov eax, 0xffffffff | eax = 0xffffffff; 0x00408efb jmp 0x408f21 | goto label_3; | label_0: 0x00408efd test eax, eax | | if (eax > 0) { 0x00408eff jle 0x408f16 | 0x00408f01 test rdx, rdx | | if (rdx == 0) { 0x00408f04 je 0x408f16 | goto label_1; | } 0x00408f06 inc rdx | rdx++; 0x00408f09 mov qword [rsp], rdx | *(rsp) = rdx; 0x00408f0d add eax, 0xc4653600 | eax += 0xc4653600; | label_2: 0x00408f12 mov dword [rsp + 8], eax | *((rsp + 8)) = eax; | } | label_1: 0x00408f16 mov rsi, rsp | 0x00408f19 mov rdi, r13 | 0x00408f1c call 0x4091d0 | BloombergLP::bslmt::Barrier::timedWait(BloombergLP::bsls::TimeIntervalconst&) (r13, rsp); | label_3: 0x00408f21 add rsp, 0x28 | 0x00408f25 pop rbx | 0x00408f26 pop r12 | 0x00408f28 pop r13 | 0x00408f2a pop r14 | 0x00408f2c pop r15 | 0x00408f2e pop rbp | 0x00408f2f ret | return rax; | }