; assembly | /* r2dec pseudo code output */ | /* bdlcc_skiplist.t/assume @ 0x4059e0 */ | #include | ; (fcn) method.SKIPLIST_TEST_CASE_DRQS_144652915.addNodes_BloombergLP::bslmt::Barrier_ () | uint64_t method_SKIPLIST_TEST_CASE_DRQS_144652915_addNodes_BloombergLP::bslmt::Barrier_ (uint32_t arg1) { | uint32_t var_bh; | int64_t var_ch; | int64_t var_10h; | int64_t var_18h; | int64_t var_20h; | int64_t var_28h; | int64_t var_30h; | int64_t var_40h; | int64_t var_50h; | int64_t var_60h; | int64_t var_70h; | int64_t var_80h; | int64_t var_90h; | int64_t var_a0h; | int64_t var_ach; | rdi = arg1; | /* SKIPLIST_TEST_CASE_DRQS_144652915::addNodes(BloombergLP::bslmt::Barrier*) */ 0x004059e0 push rbp | 0x004059e1 push r15 | 0x004059e3 push r14 | 0x004059e5 push r13 | 0x004059e7 push r12 | 0x004059e9 push rbx | 0x004059ea sub rsp, 0xc8 | 0x004059f1 mov rbx, rdi | rbx = rdi; 0x004059f4 cmp dword [rdi + 0x58], 1 | | if (*((rdi + 0x58)) == 1) { 0x004059f8 jne 0x405a01 | 0x004059fa call 0x651150 | BloombergLP::bsls::SystemTime::nowMonotonicClock() (); 0x004059ff jmp 0x405a06 | | } else { 0x00405a01 call 0x6511e0 | rax = BloombergLP::bsls::SystemTime::nowRealtimeClock() (); | } 0x00405a06 mov dword [rsp + 0x18], edx | *((rsp + 0x18)) = edx; 0x00405a0a movsxd rcx, dword [rip + 0x511b9f] | rcx = *(obj.SKIPLIST_TEST_CASE_DRQS_144652915::barrierTimeoutSeconds); 0x00405a11 add rcx, rax | rcx += rax; 0x00405a14 mov qword [rsp + 0x10], rcx | *((rsp + 0x10)) = rcx; | if (rcx > 0) { 0x00405a19 jle 0x405a2f | 0x00405a1b test edx, edx | | if (edx >= 0) { 0x00405a1d jns 0x405a4a | goto label_1; | } 0x00405a1f dec rcx | rcx--; 0x00405a22 mov qword [rsp + 0x10], rcx | *((rsp + 0x10)) = rcx; 0x00405a27 add edx, 0x3b9aca00 | edx += 0x3b9aca00; 0x00405a2d jmp 0x405a46 | | } else { 0x00405a2f test rcx, rcx | | if (rcx == 0) { 0x00405a32 je 0x405a4a | goto label_1; | } 0x00405a34 test edx, edx | | if (edx <= 0) { 0x00405a36 jle 0x405a4a | goto label_1; | } 0x00405a38 inc rcx | rcx++; 0x00405a3b mov qword [rsp + 0x10], rcx | *((rsp + 0x10)) = rcx; 0x00405a40 add edx, 0xc4653600 | edx += 0xc4653600; | } 0x00405a46 mov dword [rsp + 0x18], edx | *((rsp + 0x18)) = edx; | label_1: 0x00405a4a lea rsi, [rsp + 0x10] | 0x00405a4f mov rdi, rbx | 0x00405a52 call 0x64f660 | eax = BloombergLP::bslmt::Barrier::timedWait(BloombergLP::bsls::TimeIntervalconst&) (rbx, rsp + 0x10); 0x00405a57 test eax, eax | | if (eax != 0) { 0x00405a59 je 0x405a82 | 0x00405a5b call 0x64fbf0 | rax = BloombergLP::bslmt::TestUtil_Guard::singletonMutex() (); 0x00405a60 mov rbx, rax | rbx = rax; 0x00405a63 mov rdi, rax | 0x00405a66 call 0x64f8a0 | BloombergLP::bslmt::RecursiveMutexImpl::lock() (rax); 0x00405a6b mov edi, 0x67b00d | edi = "!barrierTimedWaitResult"; 0x00405a70 mov esi, 0x1029 | esi = 0x1029; 0x00405a75 call 0x405800 | (anonymousnamespace)::aSsErT(int,char const*,int) (); 0x00405a7a mov rdi, rbx | 0x00405a7d call 0x64f9f0 | BloombergLP::bslmt::RecursiveMutexImpl::unlock() (rbx); | } 0x00405a82 movaps xmm0, xmmword [rip + 0x274787] | xmm0 = *(0x0067a210); 0x00405a89 movups xmmword [rsp + 0xac], xmm0 | __asm ("movups xmmword [rsp + 0xac], xmm0"); 0x00405a91 movaps xmmword [rsp + 0xa0], xmm0 | *((rsp + 0xa0)) = xmm0; 0x00405a99 movaps xmmword [rsp + 0x90], xmm0 | *((rsp + 0x90)) = xmm0; 0x00405aa1 movaps xmmword [rsp + 0x80], xmm0 | *((rsp + 0x80)) = xmm0; 0x00405aa9 movaps xmmword [rsp + 0x70], xmm0 | *((rsp + 0x70)) = xmm0; 0x00405aae movaps xmmword [rsp + 0x60], xmm0 | *((rsp + 0x60)) = xmm0; 0x00405ab3 movaps xmmword [rsp + 0x50], xmm0 | *((rsp + 0x50)) = xmm0; 0x00405ab8 movaps xmmword [rsp + 0x40], xmm0 | *((rsp + 0x40)) = xmm0; 0x00405abd movaps xmmword [rsp + 0x30], xmm0 | *((rsp + 0x30)) = xmm0; 0x00405ac2 cmp dword [rip + 0x511ae3], 0 | | if (*(obj.SKIPLIST_TEST_CASE_DRQS_144652915::numNodesPerThread) <= 0) { 0x00405ac9 jle 0x405b76 | goto label_2; | } 0x00405acf xor ebp, ebp | ebp = 0; 0x00405ad1 lea r15, [rsp + 0xc] | r15 = rsp + 0xc; 0x00405ad6 lea r12, [rsp + 0x30] | r12 = rsp + 0x30; 0x00405adb lea r13, [rsp + 0xb] | r13 = rsp + 0xb; 0x00405ae0 jmp 0x405afa | | while (rbx == 0) { | label_0: 0x00405af0 inc ebp | ebp++; 0x00405af2 cmp ebp, dword [rip + 0x511ab4] | | if (ebp >= *(obj.SKIPLIST_TEST_CASE_DRQS_144652915::numNodesPerThread)) { 0x00405af8 jge 0x405b76 | goto label_2; | } 0x00405afa xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x00405afd movaps xmmword [rsp + 0x20], xmm0 | *((rsp + 0x20)) = xmm0; 0x00405b02 mov rdi, qword [rip + 0x51490f] | 0x00405b09 mov eax, 1 | eax = 1; 0x00405b0e lock xadd dword [rip + 0x5148fe], eax | __asm ("lock xadd dword [obj.SKIPLIST_TEST_CASE_DRQS_144652915::index], eax"); 0x00405b16 inc eax | eax++; 0x00405b18 mov dword [rsp + 0xc], eax | *((rsp + 0xc)) = eax; 0x00405b1c lea rsi, [rsp + 0x20] | 0x00405b21 mov rdx, r15 | 0x00405b24 mov rcx, r12 | 0x00405b27 mov r8, r13 | 0x00405b2a call 0x438090 | BloombergLP::bdlcc::SkipList::addR(BloombergLP::bdlcc::SkipListPairHandle*,intconst&,SKIPLIST_TEST_CASE_DRQS_144652915::Payloadconst&,bool*) (*(obj.SKIPLIST_TEST_CASE_DRQS_144652915::g_skipList_p), rsp + 0x20, r15, r12, r13); 0x00405b2f cmp byte [rsp + 0xb], 0 | | if (*((rsp + 0xb)) != 0) { 0x00405b34 je 0x405b4a | 0x00405b36 mov edi, 0x91a328 | 0x00405b3b mov esi, 0x67b025 | 0x00405b40 mov edx, 7 | 0x00405b45 call 0x5bce00 | std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (obj.std::__1::cout, "Newtop\n", 7); | } 0x00405b4a mov rbx, qword [rsp + 0x28] | rbx = *((rsp + 0x28)); 0x00405b4f test rbx, rbx | 0x00405b52 je 0x405af0 | | } 0x00405b54 mov r14, qword [rsp + 0x20] | r14 = *((rsp + 0x20)); 0x00405b59 mov rdi, rbx | 0x00405b5c call 0x649ba0 | eax = BloombergLP::bdlcc::SkipList_Control::decrementRefCount() (rbx); 0x00405b61 test eax, eax | | if (eax != 0) { 0x00405b63 jne 0x405af0 | goto label_0; | } 0x00405b65 mov rdi, qword [r14 + 0x50] | 0x00405b69 mov rsi, rbx | 0x00405b6c call 0x64a300 | BloombergLP::bdlcc::SkipList_PoolUtil::deallocate(BloombergLP::bdlcc::SkipList_PoolManager*,void*) (*((r14 + 0x50)), rbx); 0x00405b71 jmp 0x405af0 | goto label_0; | label_2: 0x00405b76 add rsp, 0xc8 | 0x00405b7d pop rbx | 0x00405b7e pop r12 | 0x00405b80 pop r13 | 0x00405b82 pop r14 | 0x00405b84 pop r15 | 0x00405b86 pop rbp | 0x00405b87 ret | return rax; | }