; assembly | /* r2dec pseudo code output */ | /* ball_administration.t/assume @ 0x41bfb0 */ | #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___::copyDataStructure_BloombergLP::bslalg::BidirectionalLink_ () | 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_::copyDataStructure_BloombergLP::bslalg::BidirectionalLink_ (int64_t arg2, int64_t arg1) { | int64_t var_8h; | int64_t var_18h; | int64_t var_20h; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bslstl::HashTable, BloombergLP::ball::ManagedAttributeSet::AttributeHash, bsl::equal_to, bsl::allocator >::copyDataStructure(BloombergLP::bslalg::BidirectionalLink*) */ 0x0041bfb0 push rbp | 0x0041bfb1 push r15 | 0x0041bfb3 push r14 | 0x0041bfb5 push r13 | 0x0041bfb7 push r12 | 0x0041bfb9 push rbx | 0x0041bfba sub rsp, 0x28 | 0x0041bfbe mov rbx, rsi | rbx = rsi; 0x0041bfc1 mov r14, rdi | r14 = rdi; 0x0041bfc4 mov rsi, qword [rdi + 0x40] | 0x0041bfc8 movss xmm0, dword [rdi + 0x50] | xmm0 = *((rdi + 0x50)); 0x0041bfcd cvtss2sd xmm0, xmm0 | __asm ("cvtss2sd xmm0, xmm0"); 0x0041bfd1 lea rdi, [rsp + 0x18] | 0x0041bfd6 mov edx, 2 | 0x0041bfdb call 0x433a20 | rax = BloombergLP::bslstl::HashTable_ImpDetails::growBucketsForLoadFactor(unsigned long*,unsigned long,unsigned long,double) (rsp + 0x18, *((rdi + 0x40)), 2); 0x0041bfe0 mov rbp, rax | 0x0041bfe3 mov qword [r14 + 0x38], 0 | *((r14 + 0x38)) = 0; 0x0041bfeb shr rax, 0x3c | rax >>= 0x3c; | if (rax != 0) { 0x0041bfef jne 0x41c2ad | goto label_5; | } 0x0041bff5 lea r15, [r14 + 0x28] | r15 = r14 + 0x28; 0x0041bff9 mov rdi, qword [r14 + 8] | rdi = *((r14 + 8)); 0x0041bffd mov rsi, rbp | rsi = rbp; 0x0041c000 shl rsi, 4 | rsi <<= 4; 0x0041c004 mov rax, qword [rdi] | rax = *(rdi); 0x0041c007 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x0041c00a xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0041c00d movaps xmmword [rsp], xmm0 | *(rsp) = xmm0; 0x0041c011 test rbp, rbp | | if (rbp == 0) { 0x0041c014 je 0x41c079 | goto label_4; | } 0x0041c016 lea rdx, [rbp - 1] | rdx = rbp - 1; 0x0041c01a mov rsi, rbp | rsi = rbp; 0x0041c01d and rsi, 3 | rsi &= 3; | if (rsi == 0) { 0x0041c021 je 0x41c298 | goto label_6; | } 0x0041c027 xor edi, edi | edi = 0; 0x0041c029 mov rcx, rax | rcx = rax; 0x0041c02c nop dword [rax] | | do { 0x0041c030 movaps xmm0, xmmword [rsp] | xmm0 = *(rsp); 0x0041c034 movups xmmword [rcx], xmm0 | __asm ("movups xmmword [rcx], xmm0"); 0x0041c037 add rcx, 0x10 | rcx += 0x10; 0x0041c03b inc rdi | rdi++; 0x0041c03e cmp rsi, rdi | 0x0041c041 jne 0x41c030 | | } while (rsi != rdi); 0x0041c043 mov rsi, rbp | rsi = rbp; 0x0041c046 sub rsi, rdi | rsi -= rdi; 0x0041c049 cmp rdx, 3 | | if (rdx < 3) { 0x0041c04d jb 0x41c079 | goto label_4; | } 0x0041c04f nop | | do { | label_3: 0x0041c050 movaps xmm0, xmmword [rsp] | xmm0 = *(rsp); 0x0041c054 movups xmmword [rcx], xmm0 | __asm ("movups xmmword [rcx], xmm0"); 0x0041c057 movaps xmm0, xmmword [rsp] | xmm0 = *(rsp); 0x0041c05b movups xmmword [rcx + 0x10], xmm0 | __asm ("movups xmmword [rcx + 0x10], xmm0"); 0x0041c05f movaps xmm0, xmmword [rsp] | xmm0 = *(rsp); 0x0041c063 movups xmmword [rcx + 0x20], xmm0 | __asm ("movups xmmword [rcx + 0x20], xmm0"); 0x0041c067 movaps xmm0, xmmword [rsp] | xmm0 = *(rsp); 0x0041c06b movups xmmword [rcx + 0x30], xmm0 | __asm ("movups xmmword [rcx + 0x30], xmm0"); 0x0041c06f add rcx, 0x40 | rcx += 0x40; 0x0041c073 add rsi, 0xfffffffffffffffc | rsi += 0xfffffffffffffffc; 0x0041c077 jne 0x41c050 | | } while (rsi != 0); | label_4: 0x0041c079 mov qword [r14 + 0x28], rax | *((r14 + 0x28)) = rax; 0x0041c07d mov qword [r14 + 0x30], rbp | *((r14 + 0x30)) = rbp; 0x0041c081 lea rax, [r14 + 8] | rax = r14 + 8; 0x0041c085 mov qword [rsp], rax | *(rsp) = rax; 0x0041c089 mov qword [rsp + 8], r15 | *((rsp + 8)) = r15; 0x0041c08e mov rax, qword [rsp + 0x18] | rax = *((rsp + 0x18)); 0x0041c093 mov qword [r14 + 0x48], rax | *((r14 + 0x48)) = rax; 0x0041c097 nop word [rax + rax] | | label_0: 0x0041c0a0 mov esi, dword [rip + 0x278932] | 0x0041c0a6 lea rdi, [rbx + 0x40] | 0x0041c0aa call 0x41db00 | eax = BloombergLP::ball::Attribute::hash(BloombergLP::ball::Attributeconst&,int) (rbx + 0x40, *(obj.BloombergLP::ball::ManagedAttributeSet::AttributeHash::s_hashtableSize)); 0x0041c0af mov r13d, eax | r13d = eax; 0x0041c0b2 mov rbp, qword [r14 + 0x18] | rbp = *((r14 + 0x18)); 0x0041c0b6 test rbp, rbp | | if (rbp != 0) { 0x0041c0b9 jne 0x41c200 | goto label_7; | } 0x0041c0bf movsxd rax, dword [r14 + 0x20] | rax = *((r14 + 0x20)); 0x0041c0c3 lea r12, [rax + rax*8] | r12 = rax * 9; 0x0041c0c7 shl r12, 4 | r12 <<= 4; 0x0041c0cb lea rsi, [r12 + 0x17] | rsi = r12 + 0x17; 0x0041c0d0 and rsi, 0xfffffffffffffff0 | rsi &= 0xfffffffffffffff0; 0x0041c0d4 mov rdi, qword [r14 + 8] | rdi = *((r14 + 8)); 0x0041c0d8 mov rax, qword [rdi] | rax = *(rdi); 0x0041c0db call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x0041c0de mov rcx, rax | rcx = rax; 0x0041c0e1 mov rax, qword [r14 + 0x10] | rax = *((r14 + 0x10)); 0x0041c0e5 mov qword [rcx], rax | *(rcx) = rax; 0x0041c0e8 mov qword [r14 + 0x10], rcx | *((r14 + 0x10)) = rcx; 0x0041c0ec lea rbp, [rcx + 8] | rbp = rcx + 8; 0x0041c0f0 lea rsi, [rcx + r12 - 0x88] | rsi = rcx + r12 - 0x88; 0x0041c0f8 cmp rsi, rbp | | if (rsi <= rbp) { 0x0041c0fb jbe 0x41c1e4 | goto label_2; | } 0x0041c101 add r12, 0xffffffffffffff6f | r12 += 0xffffffffffffff6f; 0x0041c108 mov rax, r12 | rax = r12; 0x0041c10b movabs rdx, 0xe38e38e38e38e38f | rdx = 0xe38e38e38e38e38f; 0x0041c115 mul rdx | rdx:rax = rax * rdx; 0x0041c118 shr edx, 7 | edx >>= 7; 0x0041c11b inc edx | edx++; 0x0041c11d and rdx, 7 | rdx &= 7; | if (rdx == 0) { 0x0041c121 je 0x41c263 | goto label_8; | } 0x0041c127 add rcx, 0x98 | rcx += 0x98; 0x0041c12e neg rdx | rdx = -rdx; 0x0041c131 nop word cs:[rax + rax] | 0x0041c13b nop dword [rax + rax] | | do { 0x0041c140 mov qword [rcx - 0x90], rcx | *((rcx - 0x90)) = rcx; 0x0041c147 add rcx, 0x90 | rcx += 0x90; 0x0041c14e inc rdx | rdx++; 0x0041c151 jne 0x41c140 | | } while (rdx != 0); 0x0041c153 add rcx, 0xffffffffffffff70 | rcx += 0xffffffffffffff70; 0x0041c15a cmp r12, 0x3f0 | | if (r12 < 0x3f0) { 0x0041c161 jb 0x41c1e4 | goto label_2; | } 0x0041c167 nop word [rax + rax] | | do { | label_1: 0x0041c170 lea rax, [rcx + 0x90] | rax = rcx + 0x90; 0x0041c177 mov qword [rcx], rax | *(rcx) = rax; 0x0041c17a lea rax, [rcx + 0x120] | rax = rcx + 0x120; 0x0041c181 mov qword [rcx + 0x90], rax | *((rcx + 0x90)) = rax; 0x0041c188 lea rax, [rcx + 0x1b0] | rax = rcx + 0x1b0; 0x0041c18f mov qword [rcx + 0x120], rax | *((rcx + 0x120)) = rax; 0x0041c196 lea rax, [rcx + 0x240] | rax = rcx + 0x240; 0x0041c19d mov qword [rcx + 0x1b0], rax | *((rcx + 0x1b0)) = rax; 0x0041c1a4 lea rax, [rcx + 0x2d0] | rax = rcx + 0x2d0; 0x0041c1ab mov qword [rcx + 0x240], rax | *((rcx + 0x240)) = rax; 0x0041c1b2 lea rax, [rcx + 0x360] | rax = rcx + 0x360; 0x0041c1b9 mov qword [rcx + 0x2d0], rax | *((rcx + 0x2d0)) = rax; 0x0041c1c0 lea rax, [rcx + 0x3f0] | rax = rcx + 0x3f0; 0x0041c1c7 mov qword [rcx + 0x360], rax | *((rcx + 0x360)) = rax; 0x0041c1ce lea rax, [rcx + 0x480] | rax = rcx + 0x480; 0x0041c1d5 mov qword [rcx + 0x3f0], rax | *((rcx + 0x3f0)) = rax; 0x0041c1dc mov rcx, rax | rcx = rax; 0x0041c1df cmp rax, rsi | 0x0041c1e2 jb 0x41c170 | | } while (rax < rsi); | label_2: 0x0041c1e4 mov rax, qword [r14 + 0x18] | rax = *((r14 + 0x18)); 0x0041c1e8 mov qword [rsi], rax | *(rsi) = rax; 0x0041c1eb mov qword [r14 + 0x18], rbp | *((r14 + 0x18)) = rbp; 0x0041c1ef mov eax, dword [r14 + 0x20] | eax = *((r14 + 0x20)); 0x0041c1f3 cmp eax, 0x1f | | if (eax <= 0x1f) { 0x0041c1f6 jg 0x41c200 | 0x0041c1f8 add eax, eax | eax += eax; 0x0041c1fa mov dword [r14 + 0x20], eax | *((r14 + 0x20)) = eax; 0x0041c1fe nop | | } | label_7: 0x0041c200 mov rax, qword [rbp] | rax = *(rbp); 0x0041c204 mov qword [r14 + 0x18], rax | *((r14 + 0x18)) = rax; 0x0041c208 mov rax, qword [r14 + 8] | rax = *((r14 + 8)); 0x0041c20c test rax, rax | | if (rax == 0) { 0x0041c20f jne 0x41c230 | 0x0041c211 mov rax, qword [rip + 0x27b798] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x0041c218 test rax, rax | | if (rax != 0) { 0x0041c21b jne 0x41c230 | goto label_9; | } 0x0041c21d call 0x431130 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x0041c222 nop word cs:[rax + rax] | 0x0041c22c nop dword [rax] | | } | label_9: 0x0041c230 lea rsi, [rbx + 0x10] | 0x0041c234 lea rdi, [rbp + 0x10] | 0x0041c238 mov qword [rsp + 0x20], rax | *((rsp + 0x20)) = rax; 0x0041c23d lea rdx, [rsp + 0x20] | 0x0041c242 call 0x412560 | BloombergLP::ball::ManagedAttribute::ManagedAttribute(BloombergLP::ball::ManagedAttributeconst&,bsl::allocatorconst&) (rbp + 0x10, rbx + 0x10, rsp + 0x20); 0x0041c247 movsxd rdx, r13d | rdx = (int64_t) r13d; 0x0041c24a mov rdi, r15 | 0x0041c24d mov rsi, rbp | 0x0041c250 call 0x42e820 | BloombergLP::bslalg::HashTableImpUtil::insertAtBackOfBucket(BloombergLP::bslalg::HashTableAnchor*,BloombergLP::bslalg::BidirectionalLink*,unsigned long) (r15, rbp, rdx); 0x0041c255 mov rbx, qword [rbx] | rbx = *(rbx); 0x0041c258 test rbx, rbx | | if (rbx != 0) { 0x0041c25b jne 0x41c0a0 | goto label_0; | } 0x0041c261 jmp 0x41c278 | goto label_10; | label_8: 0x0041c263 mov rcx, rbp | rcx = rbp; 0x0041c266 cmp r12, 0x3f0 | | if (r12 >= 0x3f0) { 0x0041c26d jae 0x41c170 | goto label_1; | } 0x0041c273 jmp 0x41c1e4 | goto label_2; | label_10: 0x0041c278 mov qword [rsp + 8], 0 | *((rsp + 8)) = 0; 0x0041c281 mov rdi, rsp | 0x0041c284 call 0x41c2e0 | rax = BloombergLP::bslstl::HashTable_ArrayProctor>>>::~HashTable_ArrayProctor() (rsp); 0x0041c289 add rsp, 0x28 | 0x0041c28d pop rbx | 0x0041c28e pop r12 | 0x0041c290 pop r13 | 0x0041c292 pop r14 | 0x0041c294 pop r15 | 0x0041c296 pop rbp | 0x0041c297 ret | return rax; | label_6: 0x0041c298 mov rcx, rax | rcx = rax; 0x0041c29b mov rsi, rbp | rsi = rbp; 0x0041c29e cmp rdx, 3 | | if (rdx >= 3) { 0x0041c2a2 jae 0x41c050 | goto label_3; | } 0x0041c2a8 jmp 0x41c079 | goto label_4; | label_5: 0x0041c2ad call 0x432b80 | return BloombergLP::bsls::BslExceptionUtil::throwBadAlloc() (); | }