; assembly | /* r2dec pseudo code output */ | /* ball_attributecontext.t/none @ 0x4107d0 */ | #include | ; (fcn) sym.BloombergLP::bslstl::HashTable_BloombergLP::bslstl::UnorderedSetKeyConfiguration_BloombergLP::ball::ManagedAttribute___BloombergLP::ball::ManagedAttributeSet::AttributeHash__bsl::equal_to_BloombergLP::ball::ManagedAttribute___bsl::allocator_BloombergLP::ball::ManagedAttribute___::insertIfMissing_bool__BloombergLP::ball::ManagedAttribute_const_ () | uint64_t BloombergLP::bslstl::HashTable_BloombergLP::bslstl::UnorderedSetKeyConfiguration_BloombergLP::ball::ManagedAttribute_BloombergLP::ball::ManagedAttributeSet::AttributeHash_bsl::equal_to_BloombergLP::ball::ManagedAttribute_bsl::allocator_BloombergLP::ball::ManagedAttribute_::insertIfMissing_bool_BloombergLP::ball::ManagedAttribute_const_ (char * arg3, char * arg2, uint32_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::ManagedAttributeSet::AttributeHash, bsl::equal_to, bsl::allocator >::insertIfMissing(bool*, BloombergLP::ball::ManagedAttribute const&) */ 0x004107d0 push rbp | 0x004107d1 push r15 | 0x004107d3 push r14 | 0x004107d5 push r13 | 0x004107d7 push r12 | 0x004107d9 push rbx | 0x004107da sub rsp, 0x28 | 0x004107de mov r12, rdx | r12 = rdx; 0x004107e1 mov qword [rsp + 8], rsi | *((rsp + 8)) = rsi; 0x004107e6 mov r15, rdi | r15 = rdi; 0x004107e9 mov esi, dword [rip + 0x256e69] | 0x004107ef lea rdi, [rdx + 0x30] | 0x004107f3 call 0x411680 | rax = BloombergLP::ball::Attribute::hash(BloombergLP::ball::Attributeconst&,int) (rdx + 0x30, *(obj.BloombergLP::ball::ManagedAttributeSet::AttributeHash::s_hashtableSize)); 0x004107f8 cdqe | rax = (int64_t) eax; 0x004107fa xor r13d, r13d | r13d = 0; 0x004107fd mov qword [rsp + 0x20], rax | *((rsp + 0x20)) = rax; 0x00410802 xor edx, edx | edx = 0; 0x00410804 div qword [r15 + 0x30] | rax = *(rdx:rax) / r15 + 0x30; | rdx = *(rdx:rax) % r15 + 0x30; 0x00410808 mov rax, qword [r15 + 0x28] | rax = *((r15 + 0x28)); 0x0041080c shl rdx, 4 | rdx <<= 4; 0x00410810 mov rbx, qword [rax + rdx] | rbx = *((rax + rdx)); 0x00410814 mov rax, qword [rax + rdx + 8] | rax = *((rax + rdx + 8)); 0x00410819 test rax, rax | | if (rax != 0) { 0x0041081c je 0x410821 | 0x0041081e mov r13, qword [rax] | r13 = *(rax); | } 0x00410821 cmp r13, rbx | | if (r13 == rbx) { 0x00410824 je 0x4108d3 | goto label_4; | } 0x0041082a lea rbp, [r12 + 0x38] | rbp = r12 + 0x38; 0x0041082f lea r14, [rsp + 0x10] | r14 = rsp + 0x10; 0x00410834 jmp 0x410858 | goto label_5; | label_1: 0x00410840 call 0x4042c0 | eax = bcmp (); 0x00410845 test eax, eax | | if (eax == 0) { 0x00410847 je 0x410880 | goto label_6; | } 0x00410849 nop dword [rax] | | do { | label_0: 0x00410850 mov rbx, qword [rbx] | rbx = *(rbx); 0x00410853 cmp r13, rbx | | if (r13 == rbx) { 0x00410856 je 0x4108d3 | goto label_4; | } | label_5: 0x00410858 mov rdx, qword [r12 + 0x18] | rdx = *((r12 + 0x18)); 0x0041085d cmp rdx, qword [rbx + 0x28] | 0x00410861 jne 0x410850 | | } while (rdx != *((rbx + 0x28))); 0x00410863 test rdx, rdx | | if (rdx != 0) { 0x00410866 je 0x410880 | 0x00410868 cmp qword [rbx + 0x30], 0x17 | | if (*((rbx + 0x30)) == 0x17) { 0x0041086d je 0x4108b7 | goto label_7; | } 0x0041086f mov rsi, qword [rbx + 0x10] | rsi = *((rbx + 0x10)); 0x00410873 jmp 0x4108bb | goto label_8; | } | label_6: 0x00410880 mov edx, dword [r12 + 0x68] | edx = *((r12 + 0x68)); 0x00410885 cmp edx, dword [rbx + 0x78] | | if (edx != *((rbx + 0x78))) { 0x00410888 jne 0x410850 | goto label_0; | } 0x0041088a test edx, edx | | if (edx == 0) { 0x0041088c je 0x410aae | goto label_9; | } 0x00410892 lea rax, [rbx + 0x48] | rax = rbx + 0x48; 0x00410896 mov byte [rsp + 0x10], 1 | *((rsp + 0x10)) = 1; 0x0041089b mov qword [rsp + 0x18], rax | *((rsp + 0x18)) = rax; 0x004108a0 mov rdi, rbp | 0x004108a3 mov rsi, r14 | 0x004108a6 call 0x410ae0 | voidBloombergLP::bdlb::VariantImp,bsl::allocator>>>::doApply(BloombergLP::bdlb::Variant_EqualityTestVisitor&,int)const (rbp, r14, rdx); 0x004108ab cmp byte [rsp + 0x10], 0 | | if (*((rsp + 0x10)) == 0) { 0x004108b0 je 0x410850 | goto label_0; | } 0x004108b2 jmp 0x410aae | goto label_9; | label_7: 0x004108b7 lea rsi, [rbx + 0x10] | rsi = rbx + 0x10; | label_8: 0x004108bb cmp qword [r12 + 0x20], 0x17 | 0x004108c1 mov rdi, r12 | rdi = r12; | if (*((r12 + 0x20)) == 0x17) { 0x004108c4 je 0x410840 | goto label_1; | } 0x004108ca mov rdi, qword [r12] | rdi = *(r12); 0x004108ce jmp 0x410840 | goto label_1; | label_4: 0x004108d3 mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x004108d8 mov byte [rax], 1 | *(rax) = 1; 0x004108db mov rsi, qword [r15 + 0x40] | rsi = *((r15 + 0x40)); 0x004108df cmp rsi, qword [r15 + 0x48] | | if (rsi >= *((r15 + 0x48))) { 0x004108e3 jb 0x410919 | 0x004108e5 mov rax, qword [r15 + 0x30] | rax = *((r15 + 0x30)); 0x004108e9 lea rdx, [rax + rax] | rdx = rax + rax; 0x004108ed cmp rax, rdx | | if (rax >= rdx) { 0x004108f0 jae 0x410919 | goto label_10; | } 0x004108f2 inc rsi | rsi++; 0x004108f5 movss xmm0, dword [r15 + 0x50] | xmm0 = *((r15 + 0x50)); 0x004108fb cvtss2sd xmm0, xmm0 | __asm ("cvtss2sd xmm0, xmm0"); 0x004108ff lea rdi, [rsp + 0x10] | 0x00410904 call 0x423910 | rax = BloombergLP::bslstl::HashTable_ImpDetails::growBucketsForLoadFactor(unsigned long*,unsigned long,unsigned long,double) (rsp + 0x10, rsi, rdx); 0x00410909 mov rdx, qword [rsp + 0x10] | rdx = *((rsp + 0x10)); 0x0041090e mov rdi, r15 | rdi = r15; 0x00410911 mov rsi, rax | rsi = rax; 0x00410914 call 0x410b50 | BloombergLP::bslstl::HashTable,BloombergLP::ball::ManagedAttributeSet::AttributeHash,bsl::equal_to,bsl::allocator>::rehashIntoExactlyNumBuckets(unsigned long,unsigned long) (); | } | label_10: 0x00410919 mov rbx, qword [r15 + 0x18] | rbx = *((r15 + 0x18)); 0x0041091d test rbx, rbx | | if (rbx != 0) { 0x00410920 jne 0x410a6e | goto label_11; | } 0x00410926 movsxd rbp, dword [r15 + 0x20] | rbp = *((r15 + 0x20)); 0x0041092a mov rax, rbp | rax = rbp; 0x0041092d shl rax, 4 | rax <<= 4; 0x00410931 lea r14, [rax + rax*8] | r14 = rax * 9; 0x00410935 lea rsi, [rax + rax*8 + 0x17] | rsi = rax * 9; 0x0041093a and rsi, 0xfffffffffffffff0 | rsi &= 0xfffffffffffffff0; 0x0041093e mov rdi, qword [r15 + 8] | rdi = *((r15 + 8)); 0x00410942 mov rax, qword [rdi] | rax = *(rdi); 0x00410945 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x00410948 mov rcx, rax | rcx = rax; 0x0041094b mov rax, qword [r15 + 0x10] | rax = *((r15 + 0x10)); 0x0041094f mov qword [rcx], rax | *(rcx) = rax; 0x00410952 mov qword [r15 + 0x10], rcx | *((r15 + 0x10)) = rcx; 0x00410956 lea rbx, [rcx + 8] | rbx = rcx + 8; 0x0041095a lea rdi, [rcx + r14 - 0x88] | rdi = rcx + r14 - 0x88; 0x00410962 cmp rdi, rbx | | if (rdi <= rbx) { 0x00410965 jbe 0x410a54 | goto label_3; | } 0x0041096b lea rsi, [rbp + rbp*8] | rsi = rbp + rbp*8; 0x00410970 shl rsi, 4 | rsi <<= 4; 0x00410974 add rsi, 0xffffffffffffff6f | rsi += 0xffffffffffffff6f; 0x0041097b movabs rdx, 0xe38e38e38e38e38f | rdx = 0xe38e38e38e38e38f; 0x00410985 mov rax, rsi | rax = rsi; 0x00410988 mul rdx | rdx:rax = rax * rdx; 0x0041098b shr edx, 7 | edx >>= 7; 0x0041098e inc edx | edx++; 0x00410990 and rdx, 7 | rdx &= 7; | if (rdx == 0) { 0x00410994 je 0x410ab8 | goto label_12; | } 0x0041099a add rcx, 0x98 | rcx += 0x98; 0x004109a1 neg rdx | rdx = -rdx; 0x004109a4 nop word cs:[rax + rax] | 0x004109ae nop | | do { 0x004109b0 mov qword [rcx - 0x90], rcx | *((rcx - 0x90)) = rcx; 0x004109b7 add rcx, 0x90 | rcx += 0x90; 0x004109be inc rdx | rdx++; 0x004109c1 jne 0x4109b0 | | } while (rdx != 0); 0x004109c3 add rcx, 0xffffffffffffff70 | rcx += 0xffffffffffffff70; 0x004109ca cmp rsi, 0x3f0 | | if (rsi < 0x3f0) { 0x004109d1 jb 0x410a54 | goto label_3; | } 0x004109d7 nop word [rax + rax] | | do { | label_2: 0x004109e0 lea rax, [rcx + 0x90] | rax = rcx + 0x90; 0x004109e7 mov qword [rcx], rax | *(rcx) = rax; 0x004109ea lea rax, [rcx + 0x120] | rax = rcx + 0x120; 0x004109f1 mov qword [rcx + 0x90], rax | *((rcx + 0x90)) = rax; 0x004109f8 lea rax, [rcx + 0x1b0] | rax = rcx + 0x1b0; 0x004109ff mov qword [rcx + 0x120], rax | *((rcx + 0x120)) = rax; 0x00410a06 lea rax, [rcx + 0x240] | rax = rcx + 0x240; 0x00410a0d mov qword [rcx + 0x1b0], rax | *((rcx + 0x1b0)) = rax; 0x00410a14 lea rax, [rcx + 0x2d0] | rax = rcx + 0x2d0; 0x00410a1b mov qword [rcx + 0x240], rax | *((rcx + 0x240)) = rax; 0x00410a22 lea rax, [rcx + 0x360] | rax = rcx + 0x360; 0x00410a29 mov qword [rcx + 0x2d0], rax | *((rcx + 0x2d0)) = rax; 0x00410a30 lea rax, [rcx + 0x3f0] | rax = rcx + 0x3f0; 0x00410a37 mov qword [rcx + 0x360], rax | *((rcx + 0x360)) = rax; 0x00410a3e lea rax, [rcx + 0x480] | rax = rcx + 0x480; 0x00410a45 mov qword [rcx + 0x3f0], rax | *((rcx + 0x3f0)) = rax; 0x00410a4c mov rcx, rax | rcx = rax; 0x00410a4f cmp rax, rdi | 0x00410a52 jb 0x4109e0 | | } while (rax < rdi); | label_3: 0x00410a54 mov rax, qword [r15 + 0x18] | rax = *((r15 + 0x18)); 0x00410a58 mov qword [rdi], rax | *(rdi) = rax; 0x00410a5b mov qword [r15 + 0x18], rbx | *((r15 + 0x18)) = rbx; 0x00410a5f mov eax, dword [r15 + 0x20] | eax = *((r15 + 0x20)); 0x00410a63 cmp eax, 0x1f | | if (eax <= 0x1f) { 0x00410a66 jg 0x410a6e | 0x00410a68 add eax, eax | eax += eax; 0x00410a6a mov dword [r15 + 0x20], eax | *((r15 + 0x20)) = eax; | } | label_11: 0x00410a6e mov rax, qword [rbx] | rax = *(rbx); 0x00410a71 mov qword [r15 + 0x18], rax | *((r15 + 0x18)) = rax; 0x00410a75 lea rdi, [rbx + 0x10] | 0x00410a79 mov rsi, qword [r15 + 8] | 0x00410a7d xor edx, edx | 0x00410a7f mov rcx, r12 | rcx = r12; 0x00410a82 call 0x410e70 | voidBloombergLP::bslma::ConstructionUtil_Imp::construct(BloombergLP::ball::ManagedAttribute*,BloombergLP::bslma::Allocator*,bsl::integral_constant*,BloombergLP::ball::ManagedAttributeconst&) (rbx + 0x10, *((r15 + 8)), 0); 0x00410a87 lea rdi, [r15 + 0x28] | 0x00410a8b mov rsi, rbx | 0x00410a8e mov rdx, qword [rsp + 0x20] | 0x00410a93 call 0x41dd30 | BloombergLP::bslalg::HashTableImpUtil::insertAtFrontOfBucket(BloombergLP::bslalg::HashTableAnchor*,BloombergLP::bslalg::BidirectionalLink*,unsigned long) (r15 + 0x28, rbx, *((rsp + 0x20))); 0x00410a98 inc qword [r15 + 0x40] | *((r15 + 0x40))++; | do { 0x00410a9c mov rax, rbx | rax = rbx; 0x00410a9f add rsp, 0x28 | 0x00410aa3 pop rbx | 0x00410aa4 pop r12 | 0x00410aa6 pop r13 | 0x00410aa8 pop r14 | 0x00410aaa pop r15 | 0x00410aac pop rbp | 0x00410aad ret | return rax; | label_9: 0x00410aae mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x00410ab3 mov byte [rax], 0 | *(rax) = 0; 0x00410ab6 jmp 0x410a9c | | } while (1); | label_12: 0x00410ab8 mov rcx, rbx | rcx = rbx; 0x00410abb cmp rsi, 0x3f0 | | if (rsi >= 0x3f0) { 0x00410ac2 jae 0x4109e0 | goto label_2; | } 0x00410ac8 jmp 0x410a54 | goto label_3; | }