; assembly | /* r2dec pseudo code output */ | /* bdlcc_skiplist.t/assume @ 0x406e60 */ | #include | ; (fcn) method.SKIPLIST_TEST_CASE_MINUS_100.run__ () | int64_t method_SKIPLIST_TEST_CASE_MINUS_100_run_ (void) { | int64_t var_8h; | int64_t var_10h; | int64_t var_20h; | int64_t var_28h; | int64_t var_30h; | uint32_t var_38h; | int64_t var_40h; | int64_t var_68h; | int64_t var_70h; | int64_t var_78h; | char * var_80h; | int64_t var_88h; | int64_t var_90h; | int64_t var_98h; | int64_t var_a0h; | int64_t var_b0h; | int64_t var_c0h; | int64_t var_d0h; | int64_t var_e0h; | int64_t var_f0h; | /* SKIPLIST_TEST_CASE_MINUS_100::run() */ 0x00406e60 push rbp | 0x00406e61 push r15 | 0x00406e63 push r14 | 0x00406e65 push rbx | 0x00406e66 sub rsp, 0x108 | 0x00406e6d cmp dword [rip + 0x513564], 0 | | if (*(obj.verbose) != 0) { 0x00406e74 je 0x406fb7 | 0x00406e7a mov rax, qword [rip + 0x5134a7] | rax = std::__1::cout; 0x00406e81 mov esi, 0x91a328 | esi = std::__1::cout; 0x00406e86 add rsi, qword [rax - 0x18] | rsi += *((rax - 0x18)); 0x00406e8a lea rbx, [rsp + 0x80] | rbx = rsp + 0x80; 0x00406e92 mov rdi, rbx | rdi = rbx; 0x00406e95 call 0x405070 | std::_1::ios_base::getloc()const (); 0x00406e9a mov esi, 0x91a270 | esi = obj.std::__1::ctype_char_::id; 0x00406e9f mov rdi, rbx | rdi = rbx; 0x00406ea2 call 0x4051a0 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00406ea7 mov rcx, qword [rax] | rcx = *(rax); 0x00406eaa mov rdi, rax | rdi = rax; 0x00406ead mov esi, 0xa | esi = 0xa; 0x00406eb2 call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x00406eb5 mov ebx, eax | ebx = eax; 0x00406eb7 lea rdi, [rsp + 0x80] | rdi = rsp + 0x80; 0x00406ebf call 0x405240 | std::_1::locale::~locale() (); 0x00406ec4 movsx esi, bl | esi = (int32_t) bl; 0x00406ec7 mov edi, 0x91a328 | edi = std::__1::cout; 0x00406ecc call 0x404e30 | std::_1::basic_ostream>::put(char) (); 0x00406ed1 mov edi, 0x91a328 | edi = std::__1::cout; 0x00406ed6 call 0x405040 | std::_1::basic_ostream>::flush() (); 0x00406edb mov edi, 0x91a328 | 0x00406ee0 mov esi, 0x67b0d4 | 0x00406ee5 mov edx, 0x24 | 0x00406eea call 0x5bce00 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (obj.std::__1::cout, "The router simulation (kind of) test", 0x24); 0x00406eef mov rbx, rax | rbx = rax; 0x00406ef2 mov rax, qword [rax] | rax = *(rax); 0x00406ef5 mov rsi, qword [rax - 0x18] | rsi = *((rax - 0x18)); 0x00406ef9 add rsi, rbx | rsi += rbx; 0x00406efc lea rbp, [rsp + 0x80] | rbp = rsp + 0x80; 0x00406f04 mov rdi, rbp | rdi = rbp; 0x00406f07 call 0x405070 | std::_1::ios_base::getloc()const (); 0x00406f0c mov esi, 0x91a270 | esi = obj.std::__1::ctype_char_::id; 0x00406f11 mov rdi, rbp | rdi = rbp; 0x00406f14 call 0x4051a0 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00406f19 mov rcx, qword [rax] | rcx = *(rax); 0x00406f1c mov rdi, rax | rdi = rax; 0x00406f1f mov esi, 0xa | esi = 0xa; 0x00406f24 call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x00406f27 mov ebp, eax | 0x00406f29 lea rdi, [rsp + 0x80] | rdi = rsp + 0x80; 0x00406f31 call 0x405240 | std::_1::locale::~locale() (); 0x00406f36 movsx esi, bpl | esi = (int32_t) bpl; 0x00406f3a mov rdi, rbx | rdi = rbx; 0x00406f3d call 0x404e30 | std::_1::basic_ostream>::put(char) (); 0x00406f42 mov rdi, rbx | rdi = rbx; 0x00406f45 call 0x405040 | std::_1::basic_ostream>::flush() (); 0x00406f4a mov esi, 0x67b4b0 | 0x00406f4f mov edx, 0x24 | 0x00406f54 mov rdi, rbx | 0x00406f57 call 0x5bce00 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rbx, 0x67b4b0, 0x24); 0x00406f5c mov rbx, rax | rbx = rax; 0x00406f5f mov rax, qword [rax] | rax = *(rax); 0x00406f62 mov rsi, qword [rax - 0x18] | rsi = *((rax - 0x18)); 0x00406f66 add rsi, rbx | rsi += rbx; 0x00406f69 lea rbp, [rsp + 0x80] | rbp = rsp + 0x80; 0x00406f71 mov rdi, rbp | rdi = rbp; 0x00406f74 call 0x405070 | std::_1::ios_base::getloc()const (); 0x00406f79 mov esi, 0x91a270 | esi = obj.std::__1::ctype_char_::id; 0x00406f7e mov rdi, rbp | rdi = rbp; 0x00406f81 call 0x4051a0 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00406f86 mov rcx, qword [rax] | rcx = *(rax); 0x00406f89 mov rdi, rax | rdi = rax; 0x00406f8c mov esi, 0xa | esi = 0xa; 0x00406f91 call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x00406f94 mov ebp, eax | 0x00406f96 lea rdi, [rsp + 0x80] | rdi = rsp + 0x80; 0x00406f9e call 0x405240 | std::_1::locale::~locale() (); 0x00406fa3 movsx esi, bpl | esi = (int32_t) bpl; 0x00406fa7 mov rdi, rbx | rdi = rbx; 0x00406faa call 0x404e30 | std::_1::basic_ostream>::put(char) (); 0x00406faf mov rdi, rbx | rdi = rbx; 0x00406fb2 call 0x405040 | std::_1::basic_ostream>::flush() (); | } 0x00406fb7 lea rbx, [rsp + 0x20] | rbx = rsp + 0x20; 0x00406fbc mov rdi, rbx | 0x00406fbf call 0x649c40 | BloombergLP::bdlcc::SkipList_RandomLevelGenerator::SkipList_RandomLevelGenerator() (rbx); 0x00406fc4 mov dword [rsp + 0x28], 0 | *((rsp + 0x28)) = 0; 0x00406fcc lea r14, [rsp + 0x40] | r14 = rsp + 0x40; 0x00406fd1 mov rdi, r14 | rdi = r14; 0x00406fd4 xor esi, esi | esi = 0; 0x00406fd6 call 0x404cc0 | pthread_mutex_init (); 0x00406fdb mov dword [rsp + 0x68], 0 | *((rsp + 0x68)) = 0; 0x00406fe3 mov qword [rsp + 0x70], 0 | *((rsp + 0x70)) = 0; 0x00406fec mov rdx, qword [rip + 0x513b4d] | rdx = BloombergLP::bslma::Default::s_defaultAllocator; 0x00406ff3 test rdx, rdx | | if (rdx == 0) { 0x00406ff6 jne 0x407000 | 0x00406ff8 call 0x64e700 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00406ffd mov rdx, rax | | } 0x00407000 mov qword [rsp + 0x78], rdx | *((rsp + 0x78)) = rdx; 0x00407005 movaps xmm0, xmmword [rip + 0x2732a4] | xmm0 = "0@P`p"; 0x0040700c movaps xmmword [rsp + 0x80], xmm0 | *((rsp + 0x80)) = xmm0; 0x00407014 movaps xmm0, xmmword [rip + 0x2732a5] | xmm0 = *(0x0067a2c0); 0x0040701b movaps xmmword [rsp + 0x90], xmm0 | *((rsp + 0x90)) = xmm0; 0x00407023 movaps xmm0, xmmword [rip + 0x2732a6] | xmm0 = *(0x0067a2d0); 0x0040702a movaps xmmword [rsp + 0xa0], xmm0 | *((rsp + 0xa0)) = xmm0; 0x00407032 movaps xmm0, xmmword [rip + 0x2732a7] | xmm0 = *(0x0067a2e0); 0x00407039 movaps xmmword [rsp + 0xb0], xmm0 | *((rsp + 0xb0)) = xmm0; 0x00407041 movaps xmm0, xmmword [rip + 0x2732a8] | xmm0 = *(0x0067a2f0); 0x00407048 movaps xmmword [rsp + 0xc0], xmm0 | *((rsp + 0xc0)) = xmm0; 0x00407050 movaps xmm0, xmmword [rip + 0x2732a9] | xmm0 = *(0x0067a300); 0x00407057 movaps xmmword [rsp + 0xd0], xmm0 | *((rsp + 0xd0)) = xmm0; 0x0040705f movaps xmm0, xmmword [rip + 0x2732aa] | xmm0 = *(0x0067a310); 0x00407066 movaps xmmword [rsp + 0xe0], xmm0 | *((rsp + 0xe0)) = xmm0; 0x0040706e movaps xmm0, xmmword [rip + 0x2732ab] | xmm0 = *(0x0067a320); 0x00407075 movaps xmmword [rsp + 0xf0], xmm0 | *((rsp + 0xf0)) = xmm0; 0x0040707d lea rdi, [rsp + 0x80] | 0x00407085 mov esi, 0x20 | 0x0040708a call 0x64a120 | rax = BloombergLP::bdlcc::SkipList_PoolUtil::createPoolManager(int*,int,BloombergLP::bslma::Allocator*) (rsp + 0x80, 0x20, rax); 0x0040708f mov qword [rsp + 0x70], rax | *((rsp + 0x70)) = rax; 0x00407094 mov rdi, rax | 0x00407097 mov esi, 0x1f | 0x0040709c call 0x64a060 | rax = BloombergLP::bdlcc::SkipList_PoolUtil::allocate(BloombergLP::bdlcc::SkipList_PoolManager*,int) (rax, 0x1f); 0x004070a1 mov qword [rsp + 0x30], rax | *((rsp + 0x30)) = rax; 0x004070a6 mov rdi, qword [rsp + 0x70] | 0x004070ab mov esi, 0x1f | 0x004070b0 call 0x64a060 | rax = BloombergLP::bdlcc::SkipList_PoolUtil::allocate(BloombergLP::bdlcc::SkipList_PoolManager*,int) (*((rsp + 0x70)), 0x1f); 0x004070b5 mov qword [rsp + 0x38], rax | *((rsp + 0x38)) = rax; 0x004070ba xor ecx, ecx | ecx = 0; 0x004070bc nop dword [rax] | | do { 0x004070c0 mov rax, qword [rsp + 0x30] | rax = *((rsp + 0x30)); 0x004070c5 mov qword [rax + rcx + 0x28], 0 | *((rax + rcx + 0x28)) = 0; 0x004070ce mov rax, qword [rsp + 0x30] | rax = *((rsp + 0x30)); 0x004070d3 mov rdx, qword [rsp + 0x38] | rdx = *((rsp + 0x38)); 0x004070d8 mov qword [rax + rcx + 0x20], rdx | *((rax + rcx + 0x20)) = rdx; 0x004070dd mov rax, qword [rsp + 0x30] | rax = *((rsp + 0x30)); 0x004070e2 mov rdx, qword [rsp + 0x38] | rdx = *((rsp + 0x38)); 0x004070e7 mov qword [rdx + rcx + 0x28], rax | *((rdx + rcx + 0x28)) = rax; 0x004070ec mov rax, qword [rsp + 0x38] | rax = *((rsp + 0x38)); 0x004070f1 mov qword [rax + rcx + 0x20], 0 | *((rax + rcx + 0x20)) = 0; 0x004070fa add rcx, 0x10 | rcx += 0x10; 0x004070fe cmp rcx, 0x200 | 0x00407105 jne 0x4070c0 | | } while (rcx != 0x200); 0x00407107 mov qword [rsp], 0x4067f0 | *(rsp) = method.SKIPLIST_TEST_CASE_MINUS_100.threadFunc_BloombergLP::bdlcc::SkipList_BloombergLP::bsls::TimeInterval__int___int__int__int__int_; 0x0040710f mov qword [rsp + 8], rbx | *((rsp + 8)) = rbx; 0x00407114 movaps xmm0, xmmword [rip + 0x273215] | xmm0 = *(0x0067a330); 0x0040711b movups xmmword [rsp + 0x10], xmm0 | __asm ("movups xmmword [rsp + 0x10], xmm0"); 0x00407120 mov rdx, qword [rip + 0x513a21] | rdx = BloombergLP::bslma::Default::s_globalAllocator; 0x00407127 test rdx, rdx | | if (rdx == 0) { 0x0040712a jne 0x407134 | 0x0040712c call 0x64e7d0 | rax = BloombergLP::bslma::NewDeleteAllocator::singleton() (); 0x00407131 mov rdx, rax | | } 0x00407134 lea rdi, [rsp + 0x80] | 0x0040713c mov rsi, rsp | 0x0040713f call 0x5bdb00 | intBloombergLP::bslmt::ThreadUtil::createWithAllocator*,int,int,int,int),BloombergLP::bdlf::Bind_BoundTuple5*,int,int,int,int>>>(unsigned long*,BloombergLP::bdlf::Bind*,int,int,int,int),BloombergLP::bdlf::Bind_BoundTuple5*,int,int,int,int>>const&,BloombergLP::bslma::Allocator*) (rsp + 0x80, rsp, rax); 0x00407144 mov qword [rsp], 0x4067f0 | *(rsp) = method.SKIPLIST_TEST_CASE_MINUS_100.threadFunc_BloombergLP::bdlcc::SkipList_BloombergLP::bsls::TimeInterval__int___int__int__int__int_; 0x0040714c mov qword [rsp + 8], rbx | *((rsp + 8)) = rbx; 0x00407151 movaps xmm0, xmmword [rip + 0x2731d8] | xmm0 = *(0x0067a330); 0x00407158 movups xmmword [rsp + 0x10], xmm0 | __asm ("movups xmmword [rsp + 0x10], xmm0"); 0x0040715d mov rdx, qword [rip + 0x5139e4] | rdx = BloombergLP::bslma::Default::s_globalAllocator; 0x00407164 test rdx, rdx | | if (rdx == 0) { 0x00407167 jne 0x407171 | 0x00407169 call 0x64e7d0 | rax = BloombergLP::bslma::NewDeleteAllocator::singleton() (); 0x0040716e mov rdx, rax | | } 0x00407171 lea rdi, [rsp + 0x88] | 0x00407179 mov rsi, rsp | 0x0040717c call 0x5bdb00 | intBloombergLP::bslmt::ThreadUtil::createWithAllocator*,int,int,int,int),BloombergLP::bdlf::Bind_BoundTuple5*,int,int,int,int>>>(unsigned long*,BloombergLP::bdlf::Bind*,int,int,int,int),BloombergLP::bdlf::Bind_BoundTuple5*,int,int,int,int>>const&,BloombergLP::bslma::Allocator*) (rsp + 0x88, rsp, rax); 0x00407181 mov qword [rsp], 0x4067f0 | *(rsp) = method.SKIPLIST_TEST_CASE_MINUS_100.threadFunc_BloombergLP::bdlcc::SkipList_BloombergLP::bsls::TimeInterval__int___int__int__int__int_; 0x00407189 mov qword [rsp + 8], rbx | *((rsp + 8)) = rbx; 0x0040718e movaps xmm0, xmmword [rip + 0x27319b] | xmm0 = *(0x0067a330); 0x00407195 movups xmmword [rsp + 0x10], xmm0 | __asm ("movups xmmword [rsp + 0x10], xmm0"); 0x0040719a mov rdx, qword [rip + 0x5139a7] | rdx = BloombergLP::bslma::Default::s_globalAllocator; 0x004071a1 test rdx, rdx | | if (rdx == 0) { 0x004071a4 jne 0x4071ae | 0x004071a6 call 0x64e7d0 | rax = BloombergLP::bslma::NewDeleteAllocator::singleton() (); 0x004071ab mov rdx, rax | | } 0x004071ae lea rdi, [rsp + 0x90] | 0x004071b6 mov rsi, rsp | 0x004071b9 call 0x5bdb00 | intBloombergLP::bslmt::ThreadUtil::createWithAllocator*,int,int,int,int),BloombergLP::bdlf::Bind_BoundTuple5*,int,int,int,int>>>(unsigned long*,BloombergLP::bdlf::Bind*,int,int,int,int),BloombergLP::bdlf::Bind_BoundTuple5*,int,int,int,int>>const&,BloombergLP::bslma::Allocator*) (rsp + 0x90, rsp, rax); 0x004071be mov qword [rsp], 0x4067f0 | *(rsp) = method.SKIPLIST_TEST_CASE_MINUS_100.threadFunc_BloombergLP::bdlcc::SkipList_BloombergLP::bsls::TimeInterval__int___int__int__int__int_; 0x004071c6 mov qword [rsp + 8], rbx | *((rsp + 8)) = rbx; 0x004071cb movaps xmm0, xmmword [rip + 0x27315e] | xmm0 = *(0x0067a330); 0x004071d2 movups xmmword [rsp + 0x10], xmm0 | __asm ("movups xmmword [rsp + 0x10], xmm0"); 0x004071d7 mov rdx, qword [rip + 0x51396a] | rdx = BloombergLP::bslma::Default::s_globalAllocator; 0x004071de test rdx, rdx | | if (rdx == 0) { 0x004071e1 jne 0x4071eb | 0x004071e3 call 0x64e7d0 | rax = BloombergLP::bslma::NewDeleteAllocator::singleton() (); 0x004071e8 mov rdx, rax | | } 0x004071eb lea rdi, [rsp + 0x98] | 0x004071f3 mov rsi, rsp | 0x004071f6 call 0x5bdb00 | intBloombergLP::bslmt::ThreadUtil::createWithAllocator*,int,int,int,int),BloombergLP::bdlf::Bind_BoundTuple5*,int,int,int,int>>>(unsigned long*,BloombergLP::bdlf::Bind*,int,int,int,int),BloombergLP::bdlf::Bind_BoundTuple5*,int,int,int,int>>const&,BloombergLP::bslma::Allocator*) (rsp + 0x98, rsp, rax); 0x004071fb mov rdi, qword [rsp + 0x80] | 0x00407203 xor esi, esi | 0x00407205 call 0x404e80 | pthread_join (*((rsp + 0x80)), 0); 0x0040720a mov rdi, qword [rsp + 0x88] | 0x00407212 xor esi, esi | 0x00407214 call 0x404e80 | pthread_join (*((rsp + 0x88)), 0); 0x00407219 mov rdi, qword [rsp + 0x90] | 0x00407221 xor esi, esi | 0x00407223 call 0x404e80 | pthread_join (*((rsp + 0x90)), 0); 0x00407228 mov rdi, qword [rsp + 0x98] | 0x00407230 xor esi, esi | 0x00407232 call 0x404e80 | pthread_join (*((rsp + 0x98)), 0); 0x00407237 mov rax, qword [rsp + 0x30] | rax = *((rsp + 0x30)); 0x0040723c mov rbx, qword [rax + 0x20] | rbx = *((rax + 0x20)); 0x00407240 cmp rbx, qword [rsp + 0x38] | | if (rbx == *((rsp + 0x38))) { 0x00407245 je 0x407263 | goto label_0; | } 0x00407247 nop word [rax + rax] | | do { 0x00407250 mov rdi, rbx | 0x00407253 call 0x649ba0 | BloombergLP::bdlcc::SkipList_Control::decrementRefCount() (rbx); 0x00407258 mov rbx, qword [rbx + 0x20] | rbx = *((rbx + 0x20)); 0x0040725c cmp rbx, qword [rsp + 0x38] | 0x00407261 jne 0x407250 | | } while (rbx != *((rsp + 0x38))); | label_0: 0x00407263 mov rsi, qword [rsp + 0x70] | 0x00407268 mov rdi, qword [rsp + 0x78] | 0x0040726d call 0x64a360 | BloombergLP::bdlcc::SkipList_PoolUtil::deletePoolManager(BloombergLP::bslma::Allocator*,BloombergLP::bdlcc::SkipList_PoolManager*) (*((rsp + 0x78)), *((rsp + 0x70))); 0x00407272 lea rdi, [rsp + 0x40] | rdi = rsp + 0x40; 0x00407277 call 0x64f850 | BloombergLP::bslmt::MutexImpl::~MutexImpl() (); 0x0040727c add rsp, 0x108 | 0x00407283 pop rbx | 0x00407284 pop r14 | 0x00407286 pop r15 | 0x00407288 pop rbp | 0x00407289 ret | return rax; | }