; assembly | /* r2dec pseudo code output */ | /* ball_administration.t/none @ 0x41c0f0 */ | #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_10h; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bslstl::HashTable, BloombergLP::ball::ManagedAttributeSet::AttributeHash, bsl::equal_to, bsl::allocator >::copyDataStructure(BloombergLP::bslalg::BidirectionalLink*) */ 0x0041c0f0 push rbp | 0x0041c0f1 push r15 | 0x0041c0f3 push r14 | 0x0041c0f5 push r13 | 0x0041c0f7 push r12 | 0x0041c0f9 push rbx | 0x0041c0fa sub rsp, 0x18 | 0x0041c0fe mov r13, rsi | r13 = rsi; 0x0041c101 mov r14, rdi | r14 = rdi; 0x0041c104 mov rsi, qword [rdi + 0x40] | 0x0041c108 movss xmm0, dword [rdi + 0x50] | xmm0 = *((rdi + 0x50)); 0x0041c10d cvtss2sd xmm0, xmm0 | __asm ("cvtss2sd xmm0, xmm0"); 0x0041c111 lea rdi, [rsp + 0x10] | 0x0041c116 mov edx, 2 | 0x0041c11b call 0x434170 | rax = BloombergLP::bslstl::HashTable_ImpDetails::growBucketsForLoadFactor(unsigned long*,unsigned long,unsigned long,double) (rsp + 0x10, *((rdi + 0x40)), 2); 0x0041c120 mov rbp, rax | 0x0041c123 mov qword [r14 + 0x38], 0 | *((r14 + 0x38)) = 0; 0x0041c12b shr rax, 0x3c | rax >>= 0x3c; | if (rax != 0) { 0x0041c12f jne 0x41c3af | goto label_5; | } 0x0041c135 lea r15, [r14 + 0x28] | r15 = r14 + 0x28; 0x0041c139 mov rdi, qword [r14 + 8] | rdi = *((r14 + 8)); 0x0041c13d mov rsi, rbp | rsi = rbp; 0x0041c140 shl rsi, 4 | rsi <<= 4; 0x0041c144 mov rax, qword [rdi] | rax = *(rdi); 0x0041c147 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x0041c14a xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0041c14d movaps xmmword [rsp], xmm0 | *(rsp) = xmm0; 0x0041c151 test rbp, rbp | | if (rbp == 0) { 0x0041c154 je 0x41c1b9 | goto label_4; | } 0x0041c156 lea rdx, [rbp - 1] | rdx = rbp - 1; 0x0041c15a mov rsi, rbp | rsi = rbp; 0x0041c15d and rsi, 3 | rsi &= 3; | if (rsi == 0) { 0x0041c161 je 0x41c39a | goto label_6; | } 0x0041c167 xor edi, edi | edi = 0; 0x0041c169 mov rcx, rax | rcx = rax; 0x0041c16c nop dword [rax] | | do { 0x0041c170 movaps xmm0, xmmword [rsp] | xmm0 = *(rsp); 0x0041c174 movups xmmword [rcx], xmm0 | __asm ("movups xmmword [rcx], xmm0"); 0x0041c177 add rcx, 0x10 | rcx += 0x10; 0x0041c17b inc rdi | rdi++; 0x0041c17e cmp rsi, rdi | 0x0041c181 jne 0x41c170 | | } while (rsi != rdi); 0x0041c183 mov rsi, rbp | rsi = rbp; 0x0041c186 sub rsi, rdi | rsi -= rdi; 0x0041c189 cmp rdx, 3 | | if (rdx < 3) { 0x0041c18d jb 0x41c1b9 | goto label_4; | } 0x0041c18f nop | | do { | label_3: 0x0041c190 movaps xmm0, xmmword [rsp] | xmm0 = *(rsp); 0x0041c194 movups xmmword [rcx], xmm0 | __asm ("movups xmmword [rcx], xmm0"); 0x0041c197 movaps xmm0, xmmword [rsp] | xmm0 = *(rsp); 0x0041c19b movups xmmword [rcx + 0x10], xmm0 | __asm ("movups xmmword [rcx + 0x10], xmm0"); 0x0041c19f movaps xmm0, xmmword [rsp] | xmm0 = *(rsp); 0x0041c1a3 movups xmmword [rcx + 0x20], xmm0 | __asm ("movups xmmword [rcx + 0x20], xmm0"); 0x0041c1a7 movaps xmm0, xmmword [rsp] | xmm0 = *(rsp); 0x0041c1ab movups xmmword [rcx + 0x30], xmm0 | __asm ("movups xmmword [rcx + 0x30], xmm0"); 0x0041c1af add rcx, 0x40 | rcx += 0x40; 0x0041c1b3 add rsi, 0xfffffffffffffffc | rsi += 0xfffffffffffffffc; 0x0041c1b7 jne 0x41c190 | | } while (rsi != 0); | label_4: 0x0041c1b9 mov qword [r14 + 0x28], rax | *((r14 + 0x28)) = rax; 0x0041c1bd mov qword [r14 + 0x30], rbp | *((r14 + 0x30)) = rbp; 0x0041c1c1 lea rax, [r14 + 8] | rax = r14 + 8; 0x0041c1c5 mov qword [rsp], rax | *(rsp) = rax; 0x0041c1c9 mov qword [rsp + 8], r15 | *((rsp + 8)) = r15; 0x0041c1ce mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x0041c1d3 mov qword [r14 + 0x48], rax | *((r14 + 0x48)) = rax; 0x0041c1d7 nop word [rax + rax] | | label_0: 0x0041c1e0 mov esi, dword [rip + 0x279802] | 0x0041c1e6 lea rdi, [r13 + 0x40] | 0x0041c1ea call 0x41dc00 | eax = BloombergLP::ball::Attribute::hash(BloombergLP::ball::Attributeconst&,int) (r13 + 0x40, *(obj.BloombergLP::ball::ManagedAttributeSet::AttributeHash::s_hashtableSize)); 0x0041c1ef mov r12d, eax | r12d = eax; 0x0041c1f2 mov rbp, qword [r14 + 0x18] | rbp = *((r14 + 0x18)); 0x0041c1f6 test rbp, rbp | | if (rbp != 0) { 0x0041c1f9 jne 0x41c330 | goto label_7; | } 0x0041c1ff movsxd rax, dword [r14 + 0x20] | rax = *((r14 + 0x20)); 0x0041c203 lea rbx, [rax + rax*8] | rbx = rax * 9; 0x0041c207 shl rbx, 4 | rbx <<= 4; 0x0041c20b lea rsi, [rbx + 0x17] | rsi = rbx + 0x17; 0x0041c20f and rsi, 0xfffffffffffffff0 | rsi &= 0xfffffffffffffff0; 0x0041c213 mov rdi, qword [r14 + 8] | rdi = *((r14 + 8)); 0x0041c217 mov rax, qword [rdi] | rax = *(rdi); 0x0041c21a call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x0041c21d mov rcx, rax | rcx = rax; 0x0041c220 mov rax, qword [r14 + 0x10] | rax = *((r14 + 0x10)); 0x0041c224 mov qword [rcx], rax | *(rcx) = rax; 0x0041c227 mov qword [r14 + 0x10], rcx | *((r14 + 0x10)) = rcx; 0x0041c22b lea rbp, [rcx + 8] | rbp = rcx + 8; 0x0041c22f lea rsi, [rcx + rbx - 0x88] | rsi = rcx + rbx - 0x88; 0x0041c237 cmp rsi, rbp | | if (rsi <= rbp) { 0x0041c23a jbe 0x41c314 | goto label_2; | } 0x0041c240 add rbx, 0xffffffffffffff6f | rbx += 0xffffffffffffff6f; 0x0041c247 mov rax, rbx | rax = rbx; 0x0041c24a movabs rdx, 0xe38e38e38e38e38f | rdx = 0xe38e38e38e38e38f; 0x0041c254 mul rdx | rdx:rax = rax * rdx; 0x0041c257 shr edx, 7 | edx >>= 7; 0x0041c25a inc edx | edx++; 0x0041c25c and rdx, 7 | rdx &= 7; | if (rdx == 0) { 0x0041c260 je 0x41c368 | goto label_8; | } 0x0041c266 add rcx, 0x98 | rcx += 0x98; 0x0041c26d neg rdx | rdx = -rdx; | do { 0x0041c270 mov qword [rcx - 0x90], rcx | *((rcx - 0x90)) = rcx; 0x0041c277 add rcx, 0x90 | rcx += 0x90; 0x0041c27e inc rdx | rdx++; 0x0041c281 jne 0x41c270 | | } while (rdx != 0); 0x0041c283 add rcx, 0xffffffffffffff70 | rcx += 0xffffffffffffff70; 0x0041c28a cmp rbx, 0x3f0 | | if (rbx < 0x3f0) { 0x0041c291 jb 0x41c314 | goto label_2; | } 0x0041c297 nop word [rax + rax] | | do { | label_1: 0x0041c2a0 lea rax, [rcx + 0x90] | rax = rcx + 0x90; 0x0041c2a7 mov qword [rcx], rax | *(rcx) = rax; 0x0041c2aa lea rax, [rcx + 0x120] | rax = rcx + 0x120; 0x0041c2b1 mov qword [rcx + 0x90], rax | *((rcx + 0x90)) = rax; 0x0041c2b8 lea rax, [rcx + 0x1b0] | rax = rcx + 0x1b0; 0x0041c2bf mov qword [rcx + 0x120], rax | *((rcx + 0x120)) = rax; 0x0041c2c6 lea rax, [rcx + 0x240] | rax = rcx + 0x240; 0x0041c2cd mov qword [rcx + 0x1b0], rax | *((rcx + 0x1b0)) = rax; 0x0041c2d4 lea rax, [rcx + 0x2d0] | rax = rcx + 0x2d0; 0x0041c2db mov qword [rcx + 0x240], rax | *((rcx + 0x240)) = rax; 0x0041c2e2 lea rax, [rcx + 0x360] | rax = rcx + 0x360; 0x0041c2e9 mov qword [rcx + 0x2d0], rax | *((rcx + 0x2d0)) = rax; 0x0041c2f0 lea rax, [rcx + 0x3f0] | rax = rcx + 0x3f0; 0x0041c2f7 mov qword [rcx + 0x360], rax | *((rcx + 0x360)) = rax; 0x0041c2fe lea rax, [rcx + 0x480] | rax = rcx + 0x480; 0x0041c305 mov qword [rcx + 0x3f0], rax | *((rcx + 0x3f0)) = rax; 0x0041c30c mov rcx, rax | rcx = rax; 0x0041c30f cmp rax, rsi | 0x0041c312 jb 0x41c2a0 | | } while (rax < rsi); | label_2: 0x0041c314 mov rax, qword [r14 + 0x18] | rax = *((r14 + 0x18)); 0x0041c318 mov qword [rsi], rax | *(rsi) = rax; 0x0041c31b mov qword [r14 + 0x18], rbp | *((r14 + 0x18)) = rbp; 0x0041c31f mov eax, dword [r14 + 0x20] | eax = *((r14 + 0x20)); 0x0041c323 cmp eax, 0x1f | | if (eax <= 0x1f) { 0x0041c326 jg 0x41c330 | 0x0041c328 add eax, eax | eax += eax; 0x0041c32a mov dword [r14 + 0x20], eax | *((r14 + 0x20)) = eax; 0x0041c32e nop | | } | label_7: 0x0041c330 lea rcx, [r13 + 0x10] | rcx = r13 + 0x10; 0x0041c334 mov rax, qword [rbp] | rax = *(rbp); 0x0041c338 mov qword [r14 + 0x18], rax | *((r14 + 0x18)) = rax; 0x0041c33c lea rdi, [rbp + 0x10] | 0x0041c340 mov rsi, qword [r14 + 8] | 0x0041c344 xor edx, edx | 0x0041c346 call 0x4127d0 | voidBloombergLP::bslma::ConstructionUtil_Imp::construct(BloombergLP::ball::ManagedAttribute*,BloombergLP::bslma::Allocator*,bsl::integral_constant*,BloombergLP::ball::ManagedAttributeconst&) (rbp + 0x10, *((r14 + 8)), 0); 0x0041c34b movsxd rdx, r12d | rdx = (int64_t) r12d; 0x0041c34e mov rdi, r15 | 0x0041c351 mov rsi, rbp | 0x0041c354 call 0x42ef80 | BloombergLP::bslalg::HashTableImpUtil::insertAtBackOfBucket(BloombergLP::bslalg::HashTableAnchor*,BloombergLP::bslalg::BidirectionalLink*,unsigned long) (r15, rbp, rdx); 0x0041c359 mov r13, qword [r13] | r13 = *(r13); 0x0041c35d test r13, r13 | | if (r13 != 0) { 0x0041c360 jne 0x41c1e0 | goto label_0; | } 0x0041c366 jmp 0x41c37a | goto label_9; | label_8: 0x0041c368 mov rcx, rbp | rcx = rbp; 0x0041c36b cmp rbx, 0x3f0 | | if (rbx >= 0x3f0) { 0x0041c372 jae 0x41c2a0 | goto label_1; | } 0x0041c378 jmp 0x41c314 | goto label_2; | label_9: 0x0041c37a mov qword [rsp + 8], 0 | *((rsp + 8)) = 0; 0x0041c383 mov rdi, rsp | 0x0041c386 call 0x41c3e0 | rax = BloombergLP::bslstl::HashTable_ArrayProctor>>>::~HashTable_ArrayProctor() (rsp); 0x0041c38b add rsp, 0x18 | 0x0041c38f pop rbx | 0x0041c390 pop r12 | 0x0041c392 pop r13 | 0x0041c394 pop r14 | 0x0041c396 pop r15 | 0x0041c398 pop rbp | 0x0041c399 ret | return rax; | label_6: 0x0041c39a mov rcx, rax | rcx = rax; 0x0041c39d mov rsi, rbp | rsi = rbp; 0x0041c3a0 cmp rdx, 3 | | if (rdx >= 3) { 0x0041c3a4 jae 0x41c190 | goto label_3; | } 0x0041c3aa jmp 0x41c1b9 | goto label_4; | label_5: 0x0041c3af call 0x4332d0 | return BloombergLP::bsls::BslExceptionUtil::throwBadAlloc() (); | }