; assembly | /* r2dec pseudo code output */ | /* ball_defaultattributecontainer.t/none @ 0x4160b0 */ | #include | ; (fcn) sym.BloombergLP::bslstl::HashTable_BloombergLP::bslstl::UnorderedSetKeyConfiguration_BloombergLP::ball::Attribute___BloombergLP::ball::DefaultAttributeContainer::AttributeHash__bsl::equal_to_BloombergLP::ball::Attribute___bsl::allocator_BloombergLP::ball::Attribute___::insertIfMissing_bool__BloombergLP::ball::Attribute_const_ () | uint64_t BloombergLP::bslstl::HashTable_BloombergLP::bslstl::UnorderedSetKeyConfiguration_BloombergLP::ball::Attribute_BloombergLP::ball::DefaultAttributeContainer::AttributeHash_bsl::equal_to_BloombergLP::ball::Attribute_bsl::allocator_BloombergLP::ball::Attribute_::insertIfMissing_bool_BloombergLP::ball::Attribute_const_ (char * arg3, char * arg2, size_t arg1) { | char * var_8h; | uint32_t var_10h; | int64_t var_18h; | int64_t var_20h; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bslstl::HashTable, BloombergLP::ball::DefaultAttributeContainer::AttributeHash, bsl::equal_to, bsl::allocator >::insertIfMissing(bool*, BloombergLP::ball::Attribute const&) */ 0x004160b0 push rbp | 0x004160b1 push r15 | 0x004160b3 push r14 | 0x004160b5 push r13 | 0x004160b7 push r12 | 0x004160b9 push rbx | 0x004160ba sub rsp, 0x28 | 0x004160be mov r12, rdx | r12 = rdx; 0x004160c1 mov qword [rsp + 8], rsi | *((rsp + 8)) = rsi; 0x004160c6 mov r14, rdi | r14 = rdi; 0x004160c9 mov esi, dword [rip + 0x247411] | 0x004160cf mov rdi, rdx | 0x004160d2 call 0x417be0 | rax = BloombergLP::ball::Attribute::hash(BloombergLP::ball::Attributeconst&,int) (rdx, *(obj.BloombergLP::ball::DefaultAttributeContainer::AttributeHash::s_hashtableSize)); 0x004160d7 cdqe | rax = (int64_t) eax; 0x004160d9 xor r13d, r13d | r13d = 0; 0x004160dc mov qword [rsp + 0x20], rax | *((rsp + 0x20)) = rax; 0x004160e1 xor edx, edx | edx = 0; 0x004160e3 div qword [r14 + 0x30] | rax = *(rdx:rax) / r14 + 0x30; | rdx = *(rdx:rax) % r14 + 0x30; 0x004160e7 mov rax, qword [r14 + 0x28] | rax = *((r14 + 0x28)); 0x004160eb shl rdx, 4 | rdx <<= 4; 0x004160ef mov rbx, qword [rax + rdx] | rbx = *((rax + rdx)); 0x004160f3 mov rax, qword [rax + rdx + 8] | rax = *((rax + rdx + 8)); 0x004160f8 test rax, rax | | if (rax != 0) { 0x004160fb je 0x416100 | 0x004160fd mov r13, qword [rax] | r13 = *(rax); | } 0x00416100 cmp r13, rbx | | if (r13 == rbx) { 0x00416103 je 0x416174 | goto label_3; | } 0x00416105 lea rbp, [r12 + 8] | rbp = r12 + 8; 0x0041610a lea r15, [rsp + 0x10] | r15 = rsp + 0x10; 0x0041610f jmp 0x416128 | | while (eax != 0) { | label_0: 0x00416120 mov rbx, qword [rbx] | rbx = *(rbx); 0x00416123 cmp r13, rbx | | if (r13 == rbx) { 0x00416126 je 0x416174 | goto label_3; | } 0x00416128 mov rdi, qword [r12] | 0x0041612c mov rsi, qword [rbx + 0x10] | 0x00416130 call 0x403a50 | eax = strcmp (*(r12), *((rbx + 0x10))); 0x00416135 test eax, eax | 0x00416137 jne 0x416120 | | } 0x00416139 mov edx, dword [r12 + 0x38] | edx = *((r12 + 0x38)); 0x0041613e cmp edx, dword [rbx + 0x48] | | if (edx != *((rbx + 0x48))) { 0x00416141 jne 0x416120 | goto label_0; | } 0x00416143 test edx, edx | | if (edx == 0) { 0x00416145 je 0x416167 | goto label_4; | } 0x00416147 lea rax, [rbx + 0x18] | rax = rbx + 0x18; 0x0041614b mov byte [rsp + 0x10], 1 | *((rsp + 0x10)) = 1; 0x00416150 mov qword [rsp + 0x18], rax | *((rsp + 0x18)) = rax; 0x00416155 mov rdi, rbp | 0x00416158 mov rsi, r15 | 0x0041615b call 0x416840 | voidBloombergLP::bdlb::VariantImp,bsl::allocator>>>::doApply(BloombergLP::bdlb::Variant_EqualityTestVisitor&,int)const (rbp, r15, rdx); 0x00416160 cmp byte [rsp + 0x10], 0 | | if (*((rsp + 0x10)) == 0) { 0x00416165 je 0x416120 | goto label_0; | } | label_4: 0x00416167 mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x0041616c mov byte [rax], 0 | *(rax) = 0; 0x0041616f jmp 0x416347 | goto label_5; | label_3: 0x00416174 mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x00416179 mov byte [rax], 1 | *(rax) = 1; 0x0041617c mov rsi, qword [r14 + 0x40] | rsi = *((r14 + 0x40)); 0x00416180 cmp rsi, qword [r14 + 0x48] | | if (rsi >= *((r14 + 0x48))) { 0x00416184 jb 0x4161ba | 0x00416186 mov rax, qword [r14 + 0x30] | rax = *((r14 + 0x30)); 0x0041618a lea rdx, [rax + rax] | rdx = rax + rax; 0x0041618e cmp rax, rdx | | if (rax >= rdx) { 0x00416191 jae 0x4161ba | goto label_6; | } 0x00416193 inc rsi | rsi++; 0x00416196 movss xmm0, dword [r14 + 0x50] | xmm0 = *((r14 + 0x50)); 0x0041619c cvtss2sd xmm0, xmm0 | __asm ("cvtss2sd xmm0, xmm0"); 0x004161a0 lea rdi, [rsp + 0x10] | 0x004161a5 call 0x41c460 | rax = BloombergLP::bslstl::HashTable_ImpDetails::growBucketsForLoadFactor(unsigned long*,unsigned long,unsigned long,double) (rsp + 0x10, rsi, rdx); 0x004161aa mov rdx, qword [rsp + 0x10] | rdx = *((rsp + 0x10)); 0x004161af mov rdi, r14 | rdi = r14; 0x004161b2 mov rsi, rax | rsi = rax; 0x004161b5 call 0x416390 | BloombergLP::bslstl::HashTable,BloombergLP::ball::DefaultAttributeContainer::AttributeHash,bsl::equal_to,bsl::allocator>::rehashIntoExactlyNumBuckets(unsigned long,unsigned long) (); | } | label_6: 0x004161ba mov rbx, qword [r14 + 0x18] | rbx = *((r14 + 0x18)); 0x004161be test rbx, rbx | | if (rbx != 0) { 0x004161c1 jne 0x4162e8 | goto label_7; | } 0x004161c7 movsxd r15, dword [r14 + 0x20] | r15 = *((r14 + 0x20)); 0x004161cb mov rax, r15 | rax = r15; 0x004161ce shl rax, 5 | rax <<= 5; 0x004161d2 lea rbp, [rax + rax*2] | rbp = rax * 3; 0x004161d6 mov rsi, rbp | rsi = rbp; 0x004161d9 or rsi, 0x10 | rsi |= 0x10; 0x004161dd mov rdi, qword [r14 + 8] | rdi = *((r14 + 8)); 0x004161e1 mov rax, qword [rdi] | rax = *(rdi); 0x004161e4 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x004161e7 mov rcx, rax | rcx = rax; 0x004161ea mov rax, qword [r14 + 0x10] | rax = *((r14 + 0x10)); 0x004161ee mov qword [rcx], rax | *(rcx) = rax; 0x004161f1 mov qword [r14 + 0x10], rcx | *((r14 + 0x10)) = rcx; 0x004161f5 lea rbx, [rcx + 8] | rbx = rcx + 8; 0x004161f9 lea rdi, [rcx + rbp - 0x58] | rdi = rcx + rbp - 0x58; 0x004161fe cmp rdi, rbx | | if (rdi <= rbx) { 0x00416201 jbe 0x4162ce | goto label_2; | } 0x00416207 lea rsi, [r15 + r15*2] | rsi = r15 * 3; 0x0041620b shl rsi, 5 | rsi <<= 5; 0x0041620f add rsi, 0xffffffffffffff9f | rsi += 0xffffffffffffff9f; 0x00416213 movabs rdx, 0xaaaaaaaaaaaaaaab | rdx = 0xaaaaaaaaaaaaaaab; 0x0041621d mov rax, rsi | rax = rsi; 0x00416220 mul rdx | rdx:rax = rax * rdx; 0x00416223 shr edx, 6 | edx >>= 6; 0x00416226 inc edx | edx++; 0x00416228 and rdx, 7 | rdx &= 7; | if (rdx == 0) { 0x0041622c je 0x416359 | goto label_8; | } 0x00416232 add rcx, 0x68 | rcx += 0x68; 0x00416236 neg rdx | rdx = -rdx; 0x00416239 nop dword [rax] | | do { 0x00416240 mov qword [rcx - 0x60], rcx | *((rcx - 0x60)) = rcx; 0x00416244 add rcx, 0x60 | rcx += 0x60; 0x00416248 inc rdx | rdx++; 0x0041624b jne 0x416240 | | } while (rdx != 0); 0x0041624d add rcx, 0xffffffffffffffa0 | rcx += 0xffffffffffffffa0; 0x00416251 cmp rsi, 0x2a0 | | if (rsi < 0x2a0) { 0x00416258 jb 0x4162ce | goto label_2; | } 0x0041625a nop word [rax + rax] | | do { | label_1: 0x00416260 lea rax, [rcx + 0x60] | rax = rcx + 0x60; 0x00416264 mov qword [rcx], rax | *(rcx) = rax; 0x00416267 lea rax, [rcx + 0xc0] | rax = rcx + 0xc0; 0x0041626e mov qword [rcx + 0x60], rax | *((rcx + 0x60)) = rax; 0x00416272 lea rax, [rcx + 0x120] | rax = rcx + 0x120; 0x00416279 mov qword [rcx + 0xc0], rax | *((rcx + 0xc0)) = rax; 0x00416280 lea rax, [rcx + 0x180] | rax = rcx + 0x180; 0x00416287 mov qword [rcx + 0x120], rax | *((rcx + 0x120)) = rax; 0x0041628e lea rax, [rcx + 0x1e0] | rax = rcx + 0x1e0; 0x00416295 mov qword [rcx + 0x180], rax | *((rcx + 0x180)) = rax; 0x0041629c lea rax, [rcx + 0x240] | rax = rcx + 0x240; 0x004162a3 mov qword [rcx + 0x1e0], rax | *((rcx + 0x1e0)) = rax; 0x004162aa lea rax, [rcx + 0x2a0] | rax = rcx + 0x2a0; 0x004162b1 mov qword [rcx + 0x240], rax | *((rcx + 0x240)) = rax; 0x004162b8 lea rax, [rcx + 0x300] | rax = rcx + 0x300; 0x004162bf mov qword [rcx + 0x2a0], rax | *((rcx + 0x2a0)) = rax; 0x004162c6 mov rcx, rax | rcx = rax; 0x004162c9 cmp rax, rdi | 0x004162cc jb 0x416260 | | } while (rax < rdi); | label_2: 0x004162ce mov rax, qword [r14 + 0x18] | rax = *((r14 + 0x18)); 0x004162d2 mov qword [rdi], rax | *(rdi) = rax; 0x004162d5 mov qword [r14 + 0x18], rbx | *((r14 + 0x18)) = rbx; 0x004162d9 mov eax, dword [r14 + 0x20] | eax = *((r14 + 0x20)); 0x004162dd cmp eax, 0x1f | | if (eax <= 0x1f) { 0x004162e0 jg 0x4162e8 | 0x004162e2 add eax, eax | eax += eax; 0x004162e4 mov dword [r14 + 0x20], eax | *((r14 + 0x20)) = eax; | } | label_7: 0x004162e8 mov rax, qword [rbx] | rax = *(rbx); 0x004162eb mov qword [r14 + 0x18], rax | *((r14 + 0x18)) = rax; 0x004162ef mov rdx, qword [r14 + 8] | rdx = *((r14 + 8)); 0x004162f3 test rdx, rdx | | if (rdx == 0) { 0x004162f6 jne 0x41630c | 0x004162f8 mov rdx, qword [rip + 0x247a31] | rdx = BloombergLP::bslma::Default::s_defaultAllocator; 0x004162ff test rdx, rdx | | if (rdx != 0) { 0x00416302 jne 0x41630c | goto label_9; | } 0x00416304 call 0x41b110 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00416309 mov rdx, rax | rdx = rax; | } | label_9: 0x0041630c mov rax, qword [r12] | rax = *(r12); 0x00416310 mov qword [rbx + 0x10], rax | *((rbx + 0x10)) = rax; 0x00416314 lea rdi, [rbx + 0x18] | 0x00416318 lea rsi, [r12 + 8] | 0x0041631d call 0x4166a0 | BloombergLP::bdlb::VariantImp,bsl::allocator>>>::VariantImp(BloombergLP::bdlb::VariantImp,bsl::allocator>>>const&,BloombergLP::bslma::Allocator*) (rbx + 0x18, r12 + 8, rdx); 0x00416322 mov eax, dword [r12 + 0x48] | eax = *((r12 + 0x48)); 0x00416327 mov dword [rbx + 0x58], eax | *((rbx + 0x58)) = eax; 0x0041632a mov eax, dword [r12 + 0x4c] | eax = *((r12 + 0x4c)); 0x0041632f mov dword [rbx + 0x5c], eax | *((rbx + 0x5c)) = eax; 0x00416332 lea rdi, [r14 + 0x28] | 0x00416336 mov rsi, rbx | 0x00416339 mov rdx, qword [rsp + 0x20] | 0x0041633e call 0x41a3f0 | BloombergLP::bslalg::HashTableImpUtil::insertAtFrontOfBucket(BloombergLP::bslalg::HashTableAnchor*,BloombergLP::bslalg::BidirectionalLink*,unsigned long) (r14 + 0x28, rbx, *((rsp + 0x20))); 0x00416343 inc qword [r14 + 0x40] | *((r14 + 0x40))++; | label_5: 0x00416347 mov rax, rbx | rax = rbx; 0x0041634a add rsp, 0x28 | 0x0041634e pop rbx | 0x0041634f pop r12 | 0x00416351 pop r13 | 0x00416353 pop r14 | 0x00416355 pop r15 | 0x00416357 pop rbp | 0x00416358 ret | return rax; | label_8: 0x00416359 mov rcx, rbx | rcx = rbx; 0x0041635c cmp rsi, 0x2a0 | | if (rsi >= 0x2a0) { 0x00416363 jae 0x416260 | goto label_1; | } 0x00416369 jmp 0x4162ce | goto label_2; | }