; assembly | /* r2dec pseudo code output */ | /* bdlcc_skiplist.t/none @ 0x406e50 */ | #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() */ 0x00406e50 push rbp | 0x00406e51 push r15 | 0x00406e53 push r14 | 0x00406e55 push rbx | 0x00406e56 sub rsp, 0x108 | 0x00406e5d cmp dword [rip + 0x513574], 0 | | if (*(obj.verbose) != 0) { 0x00406e64 je 0x406fa7 | 0x00406e6a mov rax, qword [rip + 0x5134b7] | rax = std::__1::cout; 0x00406e71 mov esi, 0x91a328 | esi = std::__1::cout; 0x00406e76 add rsi, qword [rax - 0x18] | rsi += *((rax - 0x18)); 0x00406e7a lea rbx, [rsp + 0x80] | rbx = rsp + 0x80; 0x00406e82 mov rdi, rbx | rdi = rbx; 0x00406e85 call 0x405070 | std::_1::ios_base::getloc()const (); 0x00406e8a mov esi, 0x91a270 | esi = obj.std::__1::ctype_char_::id; 0x00406e8f mov rdi, rbx | rdi = rbx; 0x00406e92 call 0x4051a0 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00406e97 mov rcx, qword [rax] | rcx = *(rax); 0x00406e9a mov rdi, rax | rdi = rax; 0x00406e9d mov esi, 0xa | esi = 0xa; 0x00406ea2 call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x00406ea5 mov ebx, eax | ebx = eax; 0x00406ea7 lea rdi, [rsp + 0x80] | rdi = rsp + 0x80; 0x00406eaf call 0x405240 | std::_1::locale::~locale() (); 0x00406eb4 movsx esi, bl | esi = (int32_t) bl; 0x00406eb7 mov edi, 0x91a328 | edi = std::__1::cout; 0x00406ebc call 0x404e30 | std::_1::basic_ostream>::put(char) (); 0x00406ec1 mov edi, 0x91a328 | edi = std::__1::cout; 0x00406ec6 call 0x405040 | std::_1::basic_ostream>::flush() (); 0x00406ecb mov edi, 0x91a328 | 0x00406ed0 mov esi, 0x67b9a4 | 0x00406ed5 mov edx, 0x24 | 0x00406eda call 0x5bcfd0 | 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); 0x00406edf mov rbx, rax | rbx = rax; 0x00406ee2 mov rax, qword [rax] | rax = *(rax); 0x00406ee5 mov rsi, qword [rax - 0x18] | rsi = *((rax - 0x18)); 0x00406ee9 add rsi, rbx | rsi += rbx; 0x00406eec lea rbp, [rsp + 0x80] | rbp = rsp + 0x80; 0x00406ef4 mov rdi, rbp | rdi = rbp; 0x00406ef7 call 0x405070 | std::_1::ios_base::getloc()const (); 0x00406efc mov esi, 0x91a270 | esi = obj.std::__1::ctype_char_::id; 0x00406f01 mov rdi, rbp | rdi = rbp; 0x00406f04 call 0x4051a0 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00406f09 mov rcx, qword [rax] | rcx = *(rax); 0x00406f0c mov rdi, rax | rdi = rax; 0x00406f0f mov esi, 0xa | esi = 0xa; 0x00406f14 call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x00406f17 mov ebp, eax | 0x00406f19 lea rdi, [rsp + 0x80] | rdi = rsp + 0x80; 0x00406f21 call 0x405240 | std::_1::locale::~locale() (); 0x00406f26 movsx esi, bpl | esi = (int32_t) bpl; 0x00406f2a mov rdi, rbx | rdi = rbx; 0x00406f2d call 0x404e30 | std::_1::basic_ostream>::put(char) (); 0x00406f32 mov rdi, rbx | rdi = rbx; 0x00406f35 call 0x405040 | std::_1::basic_ostream>::flush() (); 0x00406f3a mov esi, 0x67bd7e | 0x00406f3f mov edx, 0x24 | 0x00406f44 mov rdi, rbx | 0x00406f47 call 0x5bcfd0 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rbx, 0x67bd7e, 0x24); 0x00406f4c mov rbx, rax | rbx = rax; 0x00406f4f mov rax, qword [rax] | rax = *(rax); 0x00406f52 mov rsi, qword [rax - 0x18] | rsi = *((rax - 0x18)); 0x00406f56 add rsi, rbx | rsi += rbx; 0x00406f59 lea rbp, [rsp + 0x80] | rbp = rsp + 0x80; 0x00406f61 mov rdi, rbp | rdi = rbp; 0x00406f64 call 0x405070 | std::_1::ios_base::getloc()const (); 0x00406f69 mov esi, 0x91a270 | esi = obj.std::__1::ctype_char_::id; 0x00406f6e mov rdi, rbp | rdi = rbp; 0x00406f71 call 0x4051a0 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00406f76 mov rcx, qword [rax] | rcx = *(rax); 0x00406f79 mov rdi, rax | rdi = rax; 0x00406f7c mov esi, 0xa | esi = 0xa; 0x00406f81 call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x00406f84 mov ebp, eax | 0x00406f86 lea rdi, [rsp + 0x80] | rdi = rsp + 0x80; 0x00406f8e call 0x405240 | std::_1::locale::~locale() (); 0x00406f93 movsx esi, bpl | esi = (int32_t) bpl; 0x00406f97 mov rdi, rbx | rdi = rbx; 0x00406f9a call 0x404e30 | std::_1::basic_ostream>::put(char) (); 0x00406f9f mov rdi, rbx | rdi = rbx; 0x00406fa2 call 0x405040 | std::_1::basic_ostream>::flush() (); | } 0x00406fa7 lea rbx, [rsp + 0x20] | rbx = rsp + 0x20; 0x00406fac mov rdi, rbx | 0x00406faf call 0x64a5e0 | BloombergLP::bdlcc::SkipList_RandomLevelGenerator::SkipList_RandomLevelGenerator() (rbx); 0x00406fb4 mov dword [rsp + 0x28], 0 | *((rsp + 0x28)) = 0; 0x00406fbc lea r14, [rsp + 0x40] | r14 = rsp + 0x40; 0x00406fc1 mov rdi, r14 | rdi = r14; 0x00406fc4 xor esi, esi | esi = 0; 0x00406fc6 call 0x404cc0 | pthread_mutex_init (); 0x00406fcb mov dword [rsp + 0x68], 0 | *((rsp + 0x68)) = 0; 0x00406fd3 mov qword [rsp + 0x70], 0 | *((rsp + 0x70)) = 0; 0x00406fdc mov rdx, qword [rip + 0x513b5d] | rdx = BloombergLP::bslma::Default::s_defaultAllocator; 0x00406fe3 test rdx, rdx | | if (rdx == 0) { 0x00406fe6 jne 0x406ff0 | 0x00406fe8 call 0x64efc0 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00406fed mov rdx, rax | | } 0x00406ff0 mov qword [rsp + 0x78], rdx | *((rsp + 0x78)) = rdx; 0x00406ff5 movaps xmm0, xmmword [rip + 0x273b84] | xmm0 = "0@P`p"; 0x00406ffc movaps xmmword [rsp + 0x80], xmm0 | *((rsp + 0x80)) = xmm0; 0x00407004 movaps xmm0, xmmword [rip + 0x273b85] | xmm0 = *(0x0067ab90); 0x0040700b movaps xmmword [rsp + 0x90], xmm0 | *((rsp + 0x90)) = xmm0; 0x00407013 movaps xmm0, xmmword [rip + 0x273b86] | xmm0 = *(0x0067aba0); 0x0040701a movaps xmmword [rsp + 0xa0], xmm0 | *((rsp + 0xa0)) = xmm0; 0x00407022 movaps xmm0, xmmword [rip + 0x273b87] | xmm0 = *(0x0067abb0); 0x00407029 movaps xmmword [rsp + 0xb0], xmm0 | *((rsp + 0xb0)) = xmm0; 0x00407031 movaps xmm0, xmmword [rip + 0x273b88] | xmm0 = *(0x0067abc0); 0x00407038 movaps xmmword [rsp + 0xc0], xmm0 | *((rsp + 0xc0)) = xmm0; 0x00407040 movaps xmm0, xmmword [rip + 0x273b89] | xmm0 = *(0x0067abd0); 0x00407047 movaps xmmword [rsp + 0xd0], xmm0 | *((rsp + 0xd0)) = xmm0; 0x0040704f movaps xmm0, xmmword [rip + 0x273b8a] | xmm0 = *(0x0067abe0); 0x00407056 movaps xmmword [rsp + 0xe0], xmm0 | *((rsp + 0xe0)) = xmm0; 0x0040705e movaps xmm0, xmmword [rip + 0x273b8b] | xmm0 = *(0x0067abf0); 0x00407065 movaps xmmword [rsp + 0xf0], xmm0 | *((rsp + 0xf0)) = xmm0; 0x0040706d lea rdi, [rsp + 0x80] | 0x00407075 mov esi, 0x20 | 0x0040707a call 0x64aae0 | rax = BloombergLP::bdlcc::SkipList_PoolUtil::createPoolManager(int*,int,BloombergLP::bslma::Allocator*) (rsp + 0x80, 0x20, rax); 0x0040707f mov qword [rsp + 0x70], rax | *((rsp + 0x70)) = rax; 0x00407084 mov rdi, rax | 0x00407087 mov esi, 0x1f | 0x0040708c call 0x64aa20 | rax = BloombergLP::bdlcc::SkipList_PoolUtil::allocate(BloombergLP::bdlcc::SkipList_PoolManager*,int) (rax, 0x1f); 0x00407091 mov qword [rsp + 0x30], rax | *((rsp + 0x30)) = rax; 0x00407096 mov rdi, qword [rsp + 0x70] | 0x0040709b mov esi, 0x1f | 0x004070a0 call 0x64aa20 | rax = BloombergLP::bdlcc::SkipList_PoolUtil::allocate(BloombergLP::bdlcc::SkipList_PoolManager*,int) (*((rsp + 0x70)), 0x1f); 0x004070a5 mov qword [rsp + 0x38], rax | *((rsp + 0x38)) = rax; 0x004070aa xor ecx, ecx | ecx = 0; 0x004070ac nop dword [rax] | | do { 0x004070b0 mov rax, qword [rsp + 0x30] | rax = *((rsp + 0x30)); 0x004070b5 mov qword [rax + rcx + 0x28], 0 | *((rax + rcx + 0x28)) = 0; 0x004070be mov rax, qword [rsp + 0x30] | rax = *((rsp + 0x30)); 0x004070c3 mov rdx, qword [rsp + 0x38] | rdx = *((rsp + 0x38)); 0x004070c8 mov qword [rax + rcx + 0x20], rdx | *((rax + rcx + 0x20)) = rdx; 0x004070cd mov rax, qword [rsp + 0x30] | rax = *((rsp + 0x30)); 0x004070d2 mov rdx, qword [rsp + 0x38] | rdx = *((rsp + 0x38)); 0x004070d7 mov qword [rdx + rcx + 0x28], rax | *((rdx + rcx + 0x28)) = rax; 0x004070dc mov rax, qword [rsp + 0x38] | rax = *((rsp + 0x38)); 0x004070e1 mov qword [rax + rcx + 0x20], 0 | *((rax + rcx + 0x20)) = 0; 0x004070ea add rcx, 0x10 | rcx += 0x10; 0x004070ee cmp rcx, 0x200 | 0x004070f5 jne 0x4070b0 | | } while (rcx != 0x200); 0x004070f7 mov qword [rsp], 0x4067e0 | *(rsp) = method.SKIPLIST_TEST_CASE_MINUS_100.threadFunc_BloombergLP::bdlcc::SkipList_BloombergLP::bsls::TimeInterval__int___int__int__int__int_; 0x004070ff mov qword [rsp + 8], rbx | *((rsp + 8)) = rbx; 0x00407104 movaps xmm0, xmmword [rip + 0x273af5] | xmm0 = *(0x0067ac00); 0x0040710b movups xmmword [rsp + 0x10], xmm0 | __asm ("movups xmmword [rsp + 0x10], xmm0"); 0x00407110 mov rdx, qword [rip + 0x513a31] | rdx = BloombergLP::bslma::Default::s_globalAllocator; 0x00407117 test rdx, rdx | | if (rdx == 0) { 0x0040711a jne 0x407124 | 0x0040711c call 0x64f090 | rax = BloombergLP::bslma::NewDeleteAllocator::singleton() (); 0x00407121 mov rdx, rax | | } 0x00407124 lea rdi, [rsp + 0x80] | 0x0040712c mov rsi, rsp | 0x0040712f call 0x5bdce0 | 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); 0x00407134 mov qword [rsp], 0x4067e0 | *(rsp) = method.SKIPLIST_TEST_CASE_MINUS_100.threadFunc_BloombergLP::bdlcc::SkipList_BloombergLP::bsls::TimeInterval__int___int__int__int__int_; 0x0040713c mov qword [rsp + 8], rbx | *((rsp + 8)) = rbx; 0x00407141 movaps xmm0, xmmword [rip + 0x273ab8] | xmm0 = *(0x0067ac00); 0x00407148 movups xmmword [rsp + 0x10], xmm0 | __asm ("movups xmmword [rsp + 0x10], xmm0"); 0x0040714d mov rdx, qword [rip + 0x5139f4] | rdx = BloombergLP::bslma::Default::s_globalAllocator; 0x00407154 test rdx, rdx | | if (rdx == 0) { 0x00407157 jne 0x407161 | 0x00407159 call 0x64f090 | rax = BloombergLP::bslma::NewDeleteAllocator::singleton() (); 0x0040715e mov rdx, rax | | } 0x00407161 lea rdi, [rsp + 0x88] | 0x00407169 mov rsi, rsp | 0x0040716c call 0x5bdce0 | 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); 0x00407171 mov qword [rsp], 0x4067e0 | *(rsp) = method.SKIPLIST_TEST_CASE_MINUS_100.threadFunc_BloombergLP::bdlcc::SkipList_BloombergLP::bsls::TimeInterval__int___int__int__int__int_; 0x00407179 mov qword [rsp + 8], rbx | *((rsp + 8)) = rbx; 0x0040717e movaps xmm0, xmmword [rip + 0x273a7b] | xmm0 = *(0x0067ac00); 0x00407185 movups xmmword [rsp + 0x10], xmm0 | __asm ("movups xmmword [rsp + 0x10], xmm0"); 0x0040718a mov rdx, qword [rip + 0x5139b7] | rdx = BloombergLP::bslma::Default::s_globalAllocator; 0x00407191 test rdx, rdx | | if (rdx == 0) { 0x00407194 jne 0x40719e | 0x00407196 call 0x64f090 | rax = BloombergLP::bslma::NewDeleteAllocator::singleton() (); 0x0040719b mov rdx, rax | | } 0x0040719e lea rdi, [rsp + 0x90] | 0x004071a6 mov rsi, rsp | 0x004071a9 call 0x5bdce0 | 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); 0x004071ae mov qword [rsp], 0x4067e0 | *(rsp) = method.SKIPLIST_TEST_CASE_MINUS_100.threadFunc_BloombergLP::bdlcc::SkipList_BloombergLP::bsls::TimeInterval__int___int__int__int__int_; 0x004071b6 mov qword [rsp + 8], rbx | *((rsp + 8)) = rbx; 0x004071bb movaps xmm0, xmmword [rip + 0x273a3e] | xmm0 = *(0x0067ac00); 0x004071c2 movups xmmword [rsp + 0x10], xmm0 | __asm ("movups xmmword [rsp + 0x10], xmm0"); 0x004071c7 mov rdx, qword [rip + 0x51397a] | rdx = BloombergLP::bslma::Default::s_globalAllocator; 0x004071ce test rdx, rdx | | if (rdx == 0) { 0x004071d1 jne 0x4071db | 0x004071d3 call 0x64f090 | rax = BloombergLP::bslma::NewDeleteAllocator::singleton() (); 0x004071d8 mov rdx, rax | | } 0x004071db lea rdi, [rsp + 0x98] | 0x004071e3 mov rsi, rsp | 0x004071e6 call 0x5bdce0 | 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); 0x004071eb mov rdi, qword [rsp + 0x80] | 0x004071f3 xor esi, esi | 0x004071f5 call 0x404e80 | pthread_join (*((rsp + 0x80)), 0); 0x004071fa mov rdi, qword [rsp + 0x88] | 0x00407202 xor esi, esi | 0x00407204 call 0x404e80 | pthread_join (*((rsp + 0x88)), 0); 0x00407209 mov rdi, qword [rsp + 0x90] | 0x00407211 xor esi, esi | 0x00407213 call 0x404e80 | pthread_join (*((rsp + 0x90)), 0); 0x00407218 mov rdi, qword [rsp + 0x98] | 0x00407220 xor esi, esi | 0x00407222 call 0x404e80 | rax = pthread_join (*((rsp + 0x98)), 0); 0x00407227 mov rbx, qword [rsp + 0x30] | rbx = *((rsp + 0x30)); 0x0040722c nop dword [rax] | | do { 0x00407230 mov rbx, qword [rbx + 0x20] | rbx = *((rbx + 0x20)); 0x00407234 cmp rbx, qword [rsp + 0x38] | | if (rbx == *((rsp + 0x38))) { 0x00407239 je 0x407245 | goto label_0; | } 0x0040723b mov rdi, rbx | 0x0040723e call 0x64a560 | BloombergLP::bdlcc::SkipList_Control::decrementRefCount() (rbx); 0x00407243 jmp 0x407230 | | } while (1); | label_0: 0x00407245 mov rsi, qword [rsp + 0x70] | 0x0040724a mov rdi, qword [rsp + 0x78] | 0x0040724f call 0x64aba0 | BloombergLP::bdlcc::SkipList_PoolUtil::deletePoolManager(BloombergLP::bslma::Allocator*,BloombergLP::bdlcc::SkipList_PoolManager*) (*((rsp + 0x78)), *((rsp + 0x70))); 0x00407254 lea rdi, [rsp + 0x40] | rdi = rsp + 0x40; 0x00407259 call 0x650110 | BloombergLP::bslmt::MutexImpl::~MutexImpl() (); 0x0040725e add rsp, 0x108 | 0x00407265 pop rbx | 0x00407266 pop r14 | 0x00407268 pop r15 | 0x0040726a pop rbp | 0x0040726b ret | return rax; | }