; assembly | /* r2dec pseudo code output */ | /* bslmt_barrier.t/assume @ 0x408cd0 */ | #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&) */ 0x00408cd0 push rbp | 0x00408cd1 push r15 | 0x00408cd3 push r14 | 0x00408cd5 push r13 | 0x00408cd7 push r12 | 0x00408cd9 push rbx | 0x00408cda sub rsp, 0x28 | 0x00408cde mov rbp, rsi | 0x00408ce1 mov r13, rdi | r13 = rdi; 0x00408ce4 cmp dword [rdi + 0x58], 1 | | if (*((rdi + 0x58)) == 1) { 0x00408ce8 jne 0x408d79 | 0x00408cee mov rcx, qword [rbp] | rcx = *(rbp); 0x00408cf2 movabs rdx, 0x112e0be826d694b3 | rdx = 0x112e0be826d694b3; 0x00408cfc mov rax, rcx | rax = rcx; 0x00408cff imul rdx | rdx:rax = rax * rdx; 0x00408d02 mov rax, rdx | rax = rdx; 0x00408d05 shr rax, 0x3f | rax >>= 0x3f; 0x00408d09 sar rdx, 0x1a | rdx >>= 0x1a; 0x00408d0d add rdx, rax | rdx += rax; 0x00408d10 imul eax, edx, 0xc4653600 | eax = edx * 0xc4653600; 0x00408d16 mov qword [rsp], rdx | *(rsp) = rdx; 0x00408d1a lea esi, [rax + rcx + 0x3b9ac9ff] | esi = rax + rcx + 0x3b9ac9ff; 0x00408d21 add eax, ecx | eax += ecx; 0x00408d23 cmp esi, 0x773593ff | | if (esi >= 0x773593ff) { 0x00408d29 jb 0x408d53 | 0x00408d2b cdqe | rax = (int64_t) eax; 0x00408d2d imul rcx, rax, 0x44b82fa1 | rcx = rax * 0x44b82fa1; 0x00408d34 mov rsi, rcx | rsi = rcx; 0x00408d37 shr rsi, 0x3f | rsi >>= 0x3f; 0x00408d3b sar rcx, 0x3c | rcx >>= 0x3c; 0x00408d3f add ecx, esi | ecx += esi; 0x00408d41 movsxd rcx, ecx | rcx = (int64_t) ecx; 0x00408d44 add rdx, rcx | rdx += rcx; 0x00408d47 mov qword [rsp], rdx | *(rsp) = rdx; 0x00408d4b imul ecx, ecx, 0x3b9aca00 | ecx *= 0x3b9aca00; 0x00408d51 sub eax, ecx | eax -= ecx; | } 0x00408d53 mov dword [rsp + 8], eax | *((rsp + 8)) = eax; 0x00408d57 test rdx, rdx | | if (rdx <= 0) { 0x00408d5a jle 0x408e2a | goto label_0; | } 0x00408d60 test eax, eax | | if (eax >= 0) { 0x00408d62 jns 0x408e43 | goto label_1; | } 0x00408d68 dec rdx | rdx--; 0x00408d6b mov qword [rsp], rdx | *(rsp) = rdx; 0x00408d6f add eax, 0x3b9aca00 | eax += 0x3b9aca00; 0x00408d74 jmp 0x408e3f | goto label_2; | } 0x00408d79 call 0x403660 | rax = std::_1::chrono::steady_clock::now() (); 0x00408d7e mov rbx, rax | rbx = rax; 0x00408d81 mov eax, 0xffffffff | eax = 0xffffffff; 0x00408d86 cmp rbx, qword [rbp] | | if (rbx >= *(rbp)) { 0x00408d8a jge 0x408e4e | goto label_3; | } 0x00408d90 movabs r14, 0x112e0be826d694b3 | r14 = 0x112e0be826d694b3; 0x00408d9a lea r15, [rsp + 0x18] | r15 = rsp + 0x18; 0x00408d9f mov r12, rsp | r12 = rsp; 0x00408da2 nop word cs:[rax + rax] | 0x00408dac nop dword [rax] | | do { 0x00408db0 cmp dword [r13 + 0x58], 1 | | if (*((r13 + 0x58)) == 1) { 0x00408db5 jne 0x408dc0 | 0x00408db7 call 0x42f080 | BloombergLP::bsls::SystemTime::nowMonotonicClock() (); 0x00408dbc jmp 0x408dc5 | | } else { 0x00408dc0 call 0x42f110 | rax = BloombergLP::bsls::SystemTime::nowRealtimeClock() (); | } 0x00408dc5 mov qword [rsp + 0x18], rax | *((rsp + 0x18)) = rax; 0x00408dca mov dword [rsp + 0x20], edx | *((rsp + 0x20)) = edx; 0x00408dce mov rcx, qword [rbp] | rcx = *(rbp); 0x00408dd2 sub rcx, rbx | rcx -= rbx; 0x00408dd5 mov rax, rcx | rax = rcx; 0x00408dd8 imul r14 | rdx:rax = rax * r14; 0x00408ddb mov rax, rdx | rax = rdx; 0x00408dde shr rax, 0x3f | rax >>= 0x3f; 0x00408de2 sar rdx, 0x1a | rdx >>= 0x1a; 0x00408de6 add rdx, rax | rdx += rax; 0x00408de9 imul eax, edx, 0xc4653600 | eax = edx * 0xc4653600; 0x00408def add ecx, eax | ecx += eax; 0x00408df1 mov rdi, r15 | 0x00408df4 mov rsi, rdx | 0x00408df7 mov edx, ecx | 0x00408df9 call 0x42f230 | rax = BloombergLP::bsls::TimeInterval::addInterval(long long,int) (r15, rdx, ecx); 0x00408dfe movups xmm0, xmmword [rax] | __asm ("movups xmm0, xmmword [rax]"); 0x00408e01 movaps xmmword [rsp], xmm0 | *(rsp) = xmm0; 0x00408e05 mov rdi, r13 | 0x00408e08 mov rsi, r12 | 0x00408e0b call 0x4090b0 | eax = BloombergLP::bslmt::Barrier::timedWait(BloombergLP::bsls::TimeIntervalconst&) (r13, r12); 0x00408e10 cmp eax, 0xffffffff | | if (eax != 0xffffffff) { 0x00408e13 jne 0x408e4e | goto label_3; | } 0x00408e15 call 0x403660 | rax = std::_1::chrono::steady_clock::now() (); 0x00408e1a mov rbx, rax | rbx = rax; 0x00408e1d cmp rax, qword [rbp] | 0x00408e21 jl 0x408db0 | | } while (rax < *(rbp)); 0x00408e23 mov eax, 0xffffffff | eax = 0xffffffff; 0x00408e28 jmp 0x408e4e | goto label_3; | label_0: 0x00408e2a test eax, eax | | if (eax > 0) { 0x00408e2c jle 0x408e43 | 0x00408e2e test rdx, rdx | | if (rdx == 0) { 0x00408e31 je 0x408e43 | goto label_1; | } 0x00408e33 inc rdx | rdx++; 0x00408e36 mov qword [rsp], rdx | *(rsp) = rdx; 0x00408e3a add eax, 0xc4653600 | eax += 0xc4653600; | label_2: 0x00408e3f mov dword [rsp + 8], eax | *((rsp + 8)) = eax; | } | label_1: 0x00408e43 mov rsi, rsp | 0x00408e46 mov rdi, r13 | 0x00408e49 call 0x4090b0 | BloombergLP::bslmt::Barrier::timedWait(BloombergLP::bsls::TimeIntervalconst&) (r13, rsp); | label_3: 0x00408e4e add rsp, 0x28 | 0x00408e52 pop rbx | 0x00408e53 pop r12 | 0x00408e55 pop r13 | 0x00408e57 pop r14 | 0x00408e59 pop r15 | 0x00408e5b pop rbp | 0x00408e5c ret | return rax; | }