; assembly | /* r2dec pseudo code output */ | /* ball_defaultattributecontainer.t/assume @ 0x416120 */ | #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&) */ 0x00416120 push rbp | 0x00416121 push r15 | 0x00416123 push r14 | 0x00416125 push r13 | 0x00416127 push r12 | 0x00416129 push rbx | 0x0041612a sub rsp, 0x28 | 0x0041612e mov r13, rdx | r13 = rdx; 0x00416131 mov qword [rsp + 8], rsi | *((rsp + 8)) = rsi; 0x00416136 mov r14, rdi | r14 = rdi; 0x00416139 mov esi, dword [rip + 0x2463a1] | 0x0041613f mov rdi, rdx | 0x00416142 call 0x417b40 | rax = BloombergLP::ball::Attribute::hash(BloombergLP::ball::Attributeconst&,int) (rdx, *(obj.BloombergLP::ball::DefaultAttributeContainer::AttributeHash::s_hashtableSize)); 0x00416147 cdqe | rax = (int64_t) eax; 0x00416149 xor r15d, r15d | r15d = 0; 0x0041614c mov qword [rsp + 0x20], rax | *((rsp + 0x20)) = rax; 0x00416151 xor edx, edx | edx = 0; 0x00416153 div qword [r14 + 0x30] | rax = *(rdx:rax) / r14 + 0x30; | rdx = *(rdx:rax) % r14 + 0x30; 0x00416157 mov rax, qword [r14 + 0x28] | rax = *((r14 + 0x28)); 0x0041615b shl rdx, 4 | rdx <<= 4; 0x0041615f mov rbx, qword [rax + rdx] | rbx = *((rax + rdx)); 0x00416163 mov rax, qword [rax + rdx + 8] | rax = *((rax + rdx + 8)); 0x00416168 test rax, rax | | if (rax != 0) { 0x0041616b je 0x416170 | 0x0041616d mov r15, qword [rax] | r15 = *(rax); | } 0x00416170 cmp r15, rbx | | if (r15 == rbx) { 0x00416173 je 0x4161d0 | goto label_1; | } 0x00416175 lea rbp, [r13 + 8] | rbp = r13 + 8; 0x00416179 lea r12, [rsp + 0x10] | r12 = rsp + 0x10; 0x0041617e jmp 0x416188 | | while (eax != 0) { | label_0: 0x00416180 mov rbx, qword [rbx] | rbx = *(rbx); 0x00416183 cmp r15, rbx | | if (r15 == rbx) { 0x00416186 je 0x4161d0 | goto label_1; | } 0x00416188 mov rdi, qword [r13] | 0x0041618c mov rsi, qword [rbx + 0x10] | 0x00416190 call 0x403a50 | eax = strcmp (*(r13), *((rbx + 0x10))); 0x00416195 test eax, eax | 0x00416197 jne 0x416180 | | } 0x00416199 mov edx, dword [r13 + 0x38] | edx = *((r13 + 0x38)); 0x0041619d cmp edx, dword [rbx + 0x48] | | if (edx != *((rbx + 0x48))) { 0x004161a0 jne 0x416180 | goto label_0; | } 0x004161a2 test edx, edx | | if (edx == 0) { 0x004161a4 je 0x4161c6 | goto label_2; | } 0x004161a6 lea rax, [rbx + 0x18] | rax = rbx + 0x18; 0x004161aa mov byte [rsp + 0x10], 1 | *((rsp + 0x10)) = 1; 0x004161af mov qword [rsp + 0x18], rax | *((rsp + 0x18)) = rax; 0x004161b4 mov rdi, rbp | 0x004161b7 mov rsi, r12 | 0x004161ba call 0x4168d0 | voidBloombergLP::bdlb::VariantImp,bsl::allocator>>>::doApply(BloombergLP::bdlb::Variant_EqualityTestVisitor&,int)const (rbp, r12, rdx); 0x004161bf cmp byte [rsp + 0x10], 0 | | if (*((rsp + 0x10)) == 0) { 0x004161c4 je 0x416180 | goto label_0; | } | label_2: 0x004161c6 mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x004161cb mov byte [rax], 0 | *(rax) = 0; 0x004161ce jmp 0x41623a | goto label_3; | label_1: 0x004161d0 mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x004161d5 mov byte [rax], 1 | *(rax) = 1; 0x004161d8 mov rsi, qword [r14 + 0x40] | rsi = *((r14 + 0x40)); 0x004161dc cmp rsi, qword [r14 + 0x48] | | if (rsi >= *((r14 + 0x48))) { 0x004161e0 jb 0x416216 | 0x004161e2 mov rax, qword [r14 + 0x30] | rax = *((r14 + 0x30)); 0x004161e6 lea rdx, [rax + rax] | rdx = rax + rax; 0x004161ea cmp rax, rdx | | if (rax >= rdx) { 0x004161ed jae 0x416216 | goto label_4; | } 0x004161ef inc rsi | rsi++; 0x004161f2 movss xmm0, dword [r14 + 0x50] | xmm0 = *((r14 + 0x50)); 0x004161f8 cvtss2sd xmm0, xmm0 | __asm ("cvtss2sd xmm0, xmm0"); 0x004161fc lea rdi, [rsp + 0x10] | 0x00416201 call 0x41c3a0 | rax = BloombergLP::bslstl::HashTable_ImpDetails::growBucketsForLoadFactor(unsigned long*,unsigned long,unsigned long,double) (rsp + 0x10, rsi, rdx); 0x00416206 mov rdx, qword [rsp + 0x10] | rdx = *((rsp + 0x10)); 0x0041620b mov rdi, r14 | rdi = r14; 0x0041620e mov rsi, rax | rsi = rax; 0x00416211 call 0x416450 | BloombergLP::bslstl::HashTable,BloombergLP::ball::DefaultAttributeContainer::AttributeHash,bsl::equal_to,bsl::allocator>::rehashIntoExactlyNumBuckets(unsigned long,unsigned long) (); | } | label_4: 0x00416216 lea rdi, [r14 + 8] | 0x0041621a mov rsi, r13 | 0x0041621d call 0x416250 | rax = BloombergLP::bslalg::BidirectionalLink*BloombergLP::bslstl::BidirectionalNodePool>>::emplaceIntoNewNode(BloombergLP::ball::Attributeconst&) (r14 + 8, r13); 0x00416222 mov rbx, rax | rbx = rax; 0x00416225 lea rdi, [r14 + 0x28] | 0x00416229 mov rsi, rax | 0x0041622c mov rdx, qword [rsp + 0x20] | 0x00416231 call 0x41a330 | BloombergLP::bslalg::HashTableImpUtil::insertAtFrontOfBucket(BloombergLP::bslalg::HashTableAnchor*,BloombergLP::bslalg::BidirectionalLink*,unsigned long) (r14 + 0x28, rax, *((rsp + 0x20))); 0x00416236 inc qword [r14 + 0x40] | *((r14 + 0x40))++; | label_3: 0x0041623a mov rax, rbx | rax = rbx; 0x0041623d add rsp, 0x28 | 0x00416241 pop rbx | 0x00416242 pop r12 | 0x00416244 pop r13 | 0x00416246 pop r14 | 0x00416248 pop r15 | 0x0041624a pop rbp | 0x0041624b ret | return rax; | }