; assembly | /* r2dec pseudo code output */ | /* ball_attributecontext.t/assume @ 0x412e60 */ | #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) { | uint32_t var_8h; | int64_t var_10h; | char * 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&) */ 0x00412e60 push rbp | 0x00412e61 push r15 | 0x00412e63 push r14 | 0x00412e65 push r13 | 0x00412e67 push r12 | 0x00412e69 push rbx | 0x00412e6a sub rsp, 0x28 | 0x00412e6e mov r12, rdx | r12 = rdx; 0x00412e71 mov qword [rsp + 0x18], rsi | *((rsp + 0x18)) = rsi; 0x00412e76 mov r15, rdi | r15 = rdi; 0x00412e79 mov esi, dword [rip + 0x2567d9] | 0x00412e7f lea rdi, [rdx + 0x30] | 0x00412e83 call 0x413f00 | rax = BloombergLP::ball::Attribute::hash(BloombergLP::ball::Attributeconst&,int) (rdx + 0x30, *(obj.BloombergLP::ball::ManagedAttributeSet::AttributeHash::s_hashtableSize)); 0x00412e88 cdqe | rax = (int64_t) eax; 0x00412e8a xor r13d, r13d | r13d = 0; 0x00412e8d mov qword [rsp + 0x20], rax | *((rsp + 0x20)) = rax; 0x00412e92 xor edx, edx | edx = 0; 0x00412e94 div qword [r15 + 0x30] | rax = *(rdx:rax) / r15 + 0x30; | rdx = *(rdx:rax) % r15 + 0x30; 0x00412e98 mov rax, qword [r15 + 0x28] | rax = *((r15 + 0x28)); 0x00412e9c shl rdx, 4 | rdx <<= 4; 0x00412ea0 mov rbx, qword [rax + rdx] | rbx = *((rax + rdx)); 0x00412ea4 mov rax, qword [rax + rdx + 8] | rax = *((rax + rdx + 8)); 0x00412ea9 test rax, rax | | if (rax != 0) { 0x00412eac je 0x412eb1 | 0x00412eae mov r13, qword [rax] | r13 = *(rax); | } 0x00412eb1 cmp r13, rbx | | if (r13 == rbx) { 0x00412eb4 je 0x412f63 | goto label_4; | } 0x00412eba lea rbp, [r12 + 0x38] | rbp = r12 + 0x38; 0x00412ebf lea r14, [rsp + 8] | r14 = rsp + 8; 0x00412ec4 jmp 0x412ee8 | goto label_5; | label_1: 0x00412ed0 call 0x4042c0 | eax = bcmp (); 0x00412ed5 test eax, eax | | if (eax == 0) { 0x00412ed7 je 0x412f10 | goto label_6; | } 0x00412ed9 nop dword [rax] | | do { | label_0: 0x00412ee0 mov rbx, qword [rbx] | rbx = *(rbx); 0x00412ee3 cmp r13, rbx | | if (r13 == rbx) { 0x00412ee6 je 0x412f63 | goto label_4; | } | label_5: 0x00412ee8 mov rdx, qword [r12 + 0x18] | rdx = *((r12 + 0x18)); 0x00412eed cmp rdx, qword [rbx + 0x28] | 0x00412ef1 jne 0x412ee0 | | } while (rdx != *((rbx + 0x28))); 0x00412ef3 test rdx, rdx | | if (rdx != 0) { 0x00412ef6 je 0x412f10 | 0x00412ef8 cmp qword [rbx + 0x30], 0x17 | | if (*((rbx + 0x30)) == 0x17) { 0x00412efd je 0x412f47 | goto label_7; | } 0x00412eff mov rsi, qword [rbx + 0x10] | rsi = *((rbx + 0x10)); 0x00412f03 jmp 0x412f4b | goto label_8; | } | label_6: 0x00412f10 mov edx, dword [r12 + 0x68] | edx = *((r12 + 0x68)); 0x00412f15 cmp edx, dword [rbx + 0x78] | | if (edx != *((rbx + 0x78))) { 0x00412f18 jne 0x412ee0 | goto label_0; | } 0x00412f1a test edx, edx | | if (edx == 0) { 0x00412f1c je 0x41315c | goto label_9; | } 0x00412f22 lea rax, [rbx + 0x48] | rax = rbx + 0x48; 0x00412f26 mov byte [rsp + 8], 1 | *((rsp + 8)) = 1; 0x00412f2b mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x00412f30 mov rdi, rbp | 0x00412f33 mov rsi, r14 | 0x00412f36 call 0x413190 | voidBloombergLP::bdlb::VariantImp,bsl::allocator>>>::doApply(BloombergLP::bdlb::Variant_EqualityTestVisitor&,int)const (rbp, r14, rdx); 0x00412f3b cmp byte [rsp + 8], 0 | | if (*((rsp + 8)) == 0) { 0x00412f40 je 0x412ee0 | goto label_0; | } 0x00412f42 jmp 0x41315c | goto label_9; | label_7: 0x00412f47 lea rsi, [rbx + 0x10] | rsi = rbx + 0x10; | label_8: 0x00412f4b cmp qword [r12 + 0x20], 0x17 | 0x00412f51 mov rdi, r12 | rdi = r12; | if (*((r12 + 0x20)) == 0x17) { 0x00412f54 je 0x412ed0 | goto label_1; | } 0x00412f5a mov rdi, qword [r12] | rdi = *(r12); 0x00412f5e jmp 0x412ed0 | goto label_1; | label_4: 0x00412f63 mov rax, qword [rsp + 0x18] | rax = *((rsp + 0x18)); 0x00412f68 mov byte [rax], 1 | *(rax) = 1; 0x00412f6b mov rsi, qword [r15 + 0x40] | rsi = *((r15 + 0x40)); 0x00412f6f cmp rsi, qword [r15 + 0x48] | | if (rsi >= *((r15 + 0x48))) { 0x00412f73 jb 0x412fa9 | 0x00412f75 mov rax, qword [r15 + 0x30] | rax = *((r15 + 0x30)); 0x00412f79 lea rdx, [rax + rax] | rdx = rax + rax; 0x00412f7d cmp rax, rdx | | if (rax >= rdx) { 0x00412f80 jae 0x412fa9 | goto label_10; | } 0x00412f82 inc rsi | rsi++; 0x00412f85 movss xmm0, dword [r15 + 0x50] | xmm0 = *((r15 + 0x50)); 0x00412f8b cvtss2sd xmm0, xmm0 | __asm ("cvtss2sd xmm0, xmm0"); 0x00412f8f lea rdi, [rsp + 8] | 0x00412f94 call 0x425de0 | rax = BloombergLP::bslstl::HashTable_ImpDetails::growBucketsForLoadFactor(unsigned long*,unsigned long,unsigned long,double) (rsp + 8, rsi, rdx); 0x00412f99 mov rdx, qword [rsp + 8] | rdx = *((rsp + 8)); 0x00412f9e mov rdi, r15 | rdi = r15; 0x00412fa1 mov rsi, rax | rsi = rax; 0x00412fa4 call 0x413200 | BloombergLP::bslstl::HashTable,BloombergLP::ball::ManagedAttributeSet::AttributeHash,bsl::equal_to,bsl::allocator>::rehashIntoExactlyNumBuckets(unsigned long,unsigned long) (); | } | label_10: 0x00412fa9 mov rbx, qword [r15 + 0x18] | rbx = *((r15 + 0x18)); 0x00412fad test rbx, rbx | | if (rbx != 0) { 0x00412fb0 jne 0x4130fe | goto label_11; | } 0x00412fb6 movsxd rbp, dword [r15 + 0x20] | rbp = *((r15 + 0x20)); 0x00412fba mov rax, rbp | rax = rbp; 0x00412fbd shl rax, 4 | rax <<= 4; 0x00412fc1 lea r14, [rax + rax*8] | r14 = rax * 9; 0x00412fc5 lea rsi, [rax + rax*8 + 0x17] | rsi = rax * 9; 0x00412fca and rsi, 0xfffffffffffffff0 | rsi &= 0xfffffffffffffff0; 0x00412fce mov rdi, qword [r15 + 8] | rdi = *((r15 + 8)); 0x00412fd2 mov rax, qword [rdi] | rax = *(rdi); 0x00412fd5 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x00412fd8 mov rcx, rax | rcx = rax; 0x00412fdb mov rax, qword [r15 + 0x10] | rax = *((r15 + 0x10)); 0x00412fdf mov qword [rcx], rax | *(rcx) = rax; 0x00412fe2 mov qword [r15 + 0x10], rcx | *((r15 + 0x10)) = rcx; 0x00412fe6 lea rbx, [rcx + 8] | rbx = rcx + 8; 0x00412fea lea rdi, [rcx + r14 - 0x88] | rdi = rcx + r14 - 0x88; 0x00412ff2 cmp rdi, rbx | | if (rdi <= rbx) { 0x00412ff5 jbe 0x4130e4 | goto label_3; | } 0x00412ffb lea rsi, [rbp + rbp*8] | rsi = rbp + rbp*8; 0x00413000 shl rsi, 4 | rsi <<= 4; 0x00413004 add rsi, 0xffffffffffffff6f | rsi += 0xffffffffffffff6f; 0x0041300b movabs rdx, 0xe38e38e38e38e38f | rdx = 0xe38e38e38e38e38f; 0x00413015 mov rax, rsi | rax = rsi; 0x00413018 mul rdx | rdx:rax = rax * rdx; 0x0041301b shr edx, 7 | edx >>= 7; 0x0041301e inc edx | edx++; 0x00413020 and rdx, 7 | rdx &= 7; | if (rdx == 0) { 0x00413024 je 0x413166 | goto label_12; | } 0x0041302a add rcx, 0x98 | rcx += 0x98; 0x00413031 neg rdx | rdx = -rdx; 0x00413034 nop word cs:[rax + rax] | 0x0041303e nop | | do { 0x00413040 mov qword [rcx - 0x90], rcx | *((rcx - 0x90)) = rcx; 0x00413047 add rcx, 0x90 | rcx += 0x90; 0x0041304e inc rdx | rdx++; 0x00413051 jne 0x413040 | | } while (rdx != 0); 0x00413053 add rcx, 0xffffffffffffff70 | rcx += 0xffffffffffffff70; 0x0041305a cmp rsi, 0x3f0 | | if (rsi < 0x3f0) { 0x00413061 jb 0x4130e4 | goto label_3; | } 0x00413067 nop word [rax + rax] | | do { | label_2: 0x00413070 lea rax, [rcx + 0x90] | rax = rcx + 0x90; 0x00413077 mov qword [rcx], rax | *(rcx) = rax; 0x0041307a lea rax, [rcx + 0x120] | rax = rcx + 0x120; 0x00413081 mov qword [rcx + 0x90], rax | *((rcx + 0x90)) = rax; 0x00413088 lea rax, [rcx + 0x1b0] | rax = rcx + 0x1b0; 0x0041308f mov qword [rcx + 0x120], rax | *((rcx + 0x120)) = rax; 0x00413096 lea rax, [rcx + 0x240] | rax = rcx + 0x240; 0x0041309d mov qword [rcx + 0x1b0], rax | *((rcx + 0x1b0)) = rax; 0x004130a4 lea rax, [rcx + 0x2d0] | rax = rcx + 0x2d0; 0x004130ab mov qword [rcx + 0x240], rax | *((rcx + 0x240)) = rax; 0x004130b2 lea rax, [rcx + 0x360] | rax = rcx + 0x360; 0x004130b9 mov qword [rcx + 0x2d0], rax | *((rcx + 0x2d0)) = rax; 0x004130c0 lea rax, [rcx + 0x3f0] | rax = rcx + 0x3f0; 0x004130c7 mov qword [rcx + 0x360], rax | *((rcx + 0x360)) = rax; 0x004130ce lea rax, [rcx + 0x480] | rax = rcx + 0x480; 0x004130d5 mov qword [rcx + 0x3f0], rax | *((rcx + 0x3f0)) = rax; 0x004130dc mov rcx, rax | rcx = rax; 0x004130df cmp rax, rdi | 0x004130e2 jb 0x413070 | | } while (rax < rdi); | label_3: 0x004130e4 mov rax, qword [r15 + 0x18] | rax = *((r15 + 0x18)); 0x004130e8 mov qword [rdi], rax | *(rdi) = rax; 0x004130eb mov qword [r15 + 0x18], rbx | *((r15 + 0x18)) = rbx; 0x004130ef mov eax, dword [r15 + 0x20] | eax = *((r15 + 0x20)); 0x004130f3 cmp eax, 0x1f | | if (eax <= 0x1f) { 0x004130f6 jg 0x4130fe | 0x004130f8 add eax, eax | eax += eax; 0x004130fa mov dword [r15 + 0x20], eax | *((r15 + 0x20)) = eax; | } | label_11: 0x004130fe mov rax, qword [rbx] | rax = *(rbx); 0x00413101 mov qword [r15 + 0x18], rax | *((r15 + 0x18)) = rax; 0x00413105 mov rax, qword [r15 + 8] | rax = *((r15 + 8)); 0x00413109 test rax, rax | | if (rax == 0) { 0x0041310c jne 0x41311f | 0x0041310e mov rax, qword [rip + 0x25766b] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x00413115 test rax, rax | | if (rax != 0) { 0x00413118 jne 0x41311f | goto label_13; | } 0x0041311a call 0x421bc0 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } | label_13: 0x0041311f lea rdi, [rbx + 0x10] | 0x00413123 mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x00413128 lea rdx, [rsp + 8] | 0x0041312d mov rsi, r12 | 0x00413130 call 0x413520 | BloombergLP::ball::ManagedAttribute::ManagedAttribute(BloombergLP::ball::ManagedAttributeconst&,bsl::allocatorconst&) (rbx + 0x10, r12, rsp + 8); 0x00413135 lea rdi, [r15 + 0x28] | 0x00413139 mov rsi, rbx | 0x0041313c mov rdx, qword [rsp + 0x20] | 0x00413141 call 0x420230 | BloombergLP::bslalg::HashTableImpUtil::insertAtFrontOfBucket(BloombergLP::bslalg::HashTableAnchor*,BloombergLP::bslalg::BidirectionalLink*,unsigned long) (r15 + 0x28, rbx, *((rsp + 0x20))); 0x00413146 inc qword [r15 + 0x40] | *((r15 + 0x40))++; | do { 0x0041314a mov rax, rbx | rax = rbx; 0x0041314d add rsp, 0x28 | 0x00413151 pop rbx | 0x00413152 pop r12 | 0x00413154 pop r13 | 0x00413156 pop r14 | 0x00413158 pop r15 | 0x0041315a pop rbp | 0x0041315b ret | return rax; | label_9: 0x0041315c mov rax, qword [rsp + 0x18] | rax = *((rsp + 0x18)); 0x00413161 mov byte [rax], 0 | *(rax) = 0; 0x00413164 jmp 0x41314a | | } while (1); | label_12: 0x00413166 mov rcx, rbx | rcx = rbx; 0x00413169 cmp rsi, 0x3f0 | | if (rsi >= 0x3f0) { 0x00413170 jae 0x413070 | goto label_2; | } 0x00413176 jmp 0x4130e4 | goto label_3; | }