; assembly | /* r2dec pseudo code output */ | /* ball_defaultattributecontainer.t/none @ 0x4168b0 */ | #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___::copyDataStructure_BloombergLP::bslalg::BidirectionalLink_ () | 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_::copyDataStructure_BloombergLP::bslalg::BidirectionalLink_ (int64_t arg2, int64_t arg1) { | int64_t var_10h; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bslstl::HashTable, BloombergLP::ball::DefaultAttributeContainer::AttributeHash, bsl::equal_to, bsl::allocator >::copyDataStructure(BloombergLP::bslalg::BidirectionalLink*) */ 0x004168b0 push rbp | 0x004168b1 push r15 | 0x004168b3 push r14 | 0x004168b5 push r13 | 0x004168b7 push r12 | 0x004168b9 push rbx | 0x004168ba sub rsp, 0x18 | 0x004168be mov rbx, rsi | rbx = rsi; 0x004168c1 mov r14, rdi | r14 = rdi; 0x004168c4 mov rsi, qword [rdi + 0x40] | 0x004168c8 movss xmm0, dword [rdi + 0x50] | xmm0 = *((rdi + 0x50)); 0x004168cd cvtss2sd xmm0, xmm0 | __asm ("cvtss2sd xmm0, xmm0"); 0x004168d1 lea rdi, [rsp + 0x10] | 0x004168d6 mov edx, 2 | 0x004168db call 0x41c460 | rax = BloombergLP::bslstl::HashTable_ImpDetails::growBucketsForLoadFactor(unsigned long*,unsigned long,unsigned long,double) (rsp + 0x10, *((rdi + 0x40)), 2); 0x004168e0 mov rbp, rax | 0x004168e3 mov qword [r14 + 0x38], 0 | *((r14 + 0x38)) = 0; 0x004168eb shr rax, 0x3c | rax >>= 0x3c; | if (rax != 0) { 0x004168ef jne 0x416b76 | goto label_5; | } 0x004168f5 mov rdi, qword [r14 + 8] | rdi = *((r14 + 8)); 0x004168f9 mov rsi, rbp | rsi = rbp; 0x004168fc shl rsi, 4 | rsi <<= 4; 0x00416900 mov rax, qword [rdi] | rax = *(rdi); 0x00416903 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x00416906 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x00416909 movaps xmmword [rsp], xmm0 | *(rsp) = xmm0; 0x0041690d test rbp, rbp | | if (rbp == 0) { 0x00416910 je 0x416979 | goto label_4; | } 0x00416912 lea rdx, [rbp - 1] | rdx = rbp - 1; 0x00416916 mov rsi, rbp | rsi = rbp; 0x00416919 and rsi, 3 | rsi &= 3; | if (rsi == 0) { 0x0041691d je 0x416b61 | goto label_6; | } 0x00416923 xor edi, edi | edi = 0; 0x00416925 mov rcx, rax | rcx = rax; 0x00416928 nop dword [rax + rax] | | do { 0x00416930 movaps xmm0, xmmword [rsp] | xmm0 = *(rsp); 0x00416934 movups xmmword [rcx], xmm0 | __asm ("movups xmmword [rcx], xmm0"); 0x00416937 add rcx, 0x10 | rcx += 0x10; 0x0041693b inc rdi | rdi++; 0x0041693e cmp rsi, rdi | 0x00416941 jne 0x416930 | | } while (rsi != rdi); 0x00416943 mov rsi, rbp | rsi = rbp; 0x00416946 sub rsi, rdi | rsi -= rdi; 0x00416949 cmp rdx, 3 | | if (rdx < 3) { 0x0041694d jb 0x416979 | goto label_4; | } 0x0041694f nop | | do { | label_3: 0x00416950 movaps xmm0, xmmword [rsp] | xmm0 = *(rsp); 0x00416954 movups xmmword [rcx], xmm0 | __asm ("movups xmmword [rcx], xmm0"); 0x00416957 movaps xmm0, xmmword [rsp] | xmm0 = *(rsp); 0x0041695b movups xmmword [rcx + 0x10], xmm0 | __asm ("movups xmmword [rcx + 0x10], xmm0"); 0x0041695f movaps xmm0, xmmword [rsp] | xmm0 = *(rsp); 0x00416963 movups xmmword [rcx + 0x20], xmm0 | __asm ("movups xmmword [rcx + 0x20], xmm0"); 0x00416967 movaps xmm0, xmmword [rsp] | xmm0 = *(rsp); 0x0041696b movups xmmword [rcx + 0x30], xmm0 | __asm ("movups xmmword [rcx + 0x30], xmm0"); 0x0041696f add rcx, 0x40 | rcx += 0x40; 0x00416973 add rsi, 0xfffffffffffffffc | rsi += 0xfffffffffffffffc; 0x00416977 jne 0x416950 | | } while (rsi != 0); | label_4: 0x00416979 lea r15, [r14 + 0x28] | r15 = r14 + 0x28; 0x0041697d mov qword [r14 + 0x28], rax | *((r14 + 0x28)) = rax; 0x00416981 mov qword [r14 + 0x30], rbp | *((r14 + 0x30)) = rbp; 0x00416985 mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x0041698a mov qword [r14 + 0x48], rax | *((r14 + 0x48)) = rax; 0x0041698e nop | | label_0: 0x00416990 lea rdi, [rbx + 0x10] | 0x00416994 mov esi, dword [rip + 0x246b46] | 0x0041699a call 0x417be0 | eax = BloombergLP::ball::Attribute::hash(BloombergLP::ball::Attributeconst&,int) (rbx + 0x10, *(obj.BloombergLP::ball::DefaultAttributeContainer::AttributeHash::s_hashtableSize)); 0x0041699f mov r12d, eax | r12d = eax; 0x004169a2 mov rbp, qword [r14 + 0x18] | rbp = *((r14 + 0x18)); 0x004169a6 test rbp, rbp | | if (rbp != 0) { 0x004169a9 jne 0x416ad0 | goto label_7; | } 0x004169af movsxd r13, dword [r14 + 0x20] | r13 = *((r14 + 0x20)); 0x004169b3 mov rax, r13 | rax = r13; 0x004169b6 shl rax, 5 | rax <<= 5; 0x004169ba lea rsi, [rax + rax*2] | rsi = rax * 3; 0x004169be or rsi, 0x10 | rsi |= 0x10; 0x004169c2 mov rdi, qword [r14 + 8] | rdi = *((r14 + 8)); 0x004169c6 mov rax, qword [rdi] | rax = *(rdi); 0x004169c9 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x004169cc mov rcx, rax | rcx = rax; 0x004169cf mov rax, qword [r14 + 0x10] | rax = *((r14 + 0x10)); 0x004169d3 mov qword [rcx], rax | *(rcx) = rax; 0x004169d6 mov qword [r14 + 0x10], rcx | *((r14 + 0x10)) = rcx; 0x004169da lea rbp, [rcx + 8] | rbp = rcx + 8; 0x004169de lea rsi, [r13 + r13*2] | rsi = r13 * 3; 0x004169e3 shl rsi, 5 | rsi <<= 5; 0x004169e7 lea rdi, [rcx + rsi - 0x58] | rdi = rcx + rsi - 0x58; 0x004169ec cmp rdi, rbp | | if (rdi <= rbp) { 0x004169ef jbe 0x416aae | goto label_2; | } 0x004169f5 add rsi, 0xffffffffffffff9f | rsi += 0xffffffffffffff9f; 0x004169f9 mov rax, rsi | rax = rsi; 0x004169fc movabs rdx, 0xaaaaaaaaaaaaaaab | rdx = 0xaaaaaaaaaaaaaaab; 0x00416a06 mul rdx | rdx:rax = rax * rdx; 0x00416a09 shr edx, 6 | edx >>= 6; 0x00416a0c inc edx | edx++; 0x00416a0e and rdx, 7 | rdx &= 7; | if (rdx == 0) { 0x00416a12 je 0x416b3d | goto label_8; | } 0x00416a18 add rcx, 0x68 | rcx += 0x68; 0x00416a1c neg rdx | rdx = -rdx; 0x00416a1f nop | | do { 0x00416a20 mov qword [rcx - 0x60], rcx | *((rcx - 0x60)) = rcx; 0x00416a24 add rcx, 0x60 | rcx += 0x60; 0x00416a28 inc rdx | rdx++; 0x00416a2b jne 0x416a20 | | } while (rdx != 0); 0x00416a2d add rcx, 0xffffffffffffffa0 | rcx += 0xffffffffffffffa0; 0x00416a31 cmp rsi, 0x2a0 | | if (rsi < 0x2a0) { 0x00416a38 jb 0x416aae | goto label_2; | } 0x00416a3a nop word [rax + rax] | | do { | label_1: 0x00416a40 lea rax, [rcx + 0x60] | rax = rcx + 0x60; 0x00416a44 mov qword [rcx], rax | *(rcx) = rax; 0x00416a47 lea rax, [rcx + 0xc0] | rax = rcx + 0xc0; 0x00416a4e mov qword [rcx + 0x60], rax | *((rcx + 0x60)) = rax; 0x00416a52 lea rax, [rcx + 0x120] | rax = rcx + 0x120; 0x00416a59 mov qword [rcx + 0xc0], rax | *((rcx + 0xc0)) = rax; 0x00416a60 lea rax, [rcx + 0x180] | rax = rcx + 0x180; 0x00416a67 mov qword [rcx + 0x120], rax | *((rcx + 0x120)) = rax; 0x00416a6e lea rax, [rcx + 0x1e0] | rax = rcx + 0x1e0; 0x00416a75 mov qword [rcx + 0x180], rax | *((rcx + 0x180)) = rax; 0x00416a7c lea rax, [rcx + 0x240] | rax = rcx + 0x240; 0x00416a83 mov qword [rcx + 0x1e0], rax | *((rcx + 0x1e0)) = rax; 0x00416a8a lea rax, [rcx + 0x2a0] | rax = rcx + 0x2a0; 0x00416a91 mov qword [rcx + 0x240], rax | *((rcx + 0x240)) = rax; 0x00416a98 lea rax, [rcx + 0x300] | rax = rcx + 0x300; 0x00416a9f mov qword [rcx + 0x2a0], rax | *((rcx + 0x2a0)) = rax; 0x00416aa6 mov rcx, rax | rcx = rax; 0x00416aa9 cmp rax, rdi | 0x00416aac jb 0x416a40 | | } while (rax < rdi); | label_2: 0x00416aae mov rax, qword [r14 + 0x18] | rax = *((r14 + 0x18)); 0x00416ab2 mov qword [rdi], rax | *(rdi) = rax; 0x00416ab5 mov qword [r14 + 0x18], rbp | *((r14 + 0x18)) = rbp; 0x00416ab9 mov eax, dword [r14 + 0x20] | eax = *((r14 + 0x20)); 0x00416abd cmp eax, 0x1f | | if (eax <= 0x1f) { 0x00416ac0 jg 0x416ad0 | 0x00416ac2 add eax, eax | eax += eax; 0x00416ac4 mov dword [r14 + 0x20], eax | *((r14 + 0x20)) = eax; 0x00416ac8 nop dword [rax + rax] | | } | label_7: 0x00416ad0 mov rax, qword [rbp] | rax = *(rbp); 0x00416ad4 mov qword [r14 + 0x18], rax | *((r14 + 0x18)) = rax; 0x00416ad8 mov rdx, qword [r14 + 8] | rdx = *((r14 + 8)); 0x00416adc test rdx, rdx | | if (rdx == 0) { 0x00416adf jne 0x416b00 | 0x00416ae1 mov rdx, qword [rip + 0x247248] | rdx = BloombergLP::bslma::Default::s_defaultAllocator; 0x00416ae8 test rdx, rdx | | if (rdx != 0) { 0x00416aeb jne 0x416b00 | goto label_9; | } 0x00416aed call 0x41b110 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00416af2 mov rdx, rax | rdx = rax; 0x00416af5 nop word cs:[rax + rax] | 0x00416aff nop | | } | label_9: 0x00416b00 mov rax, qword [rbx + 0x10] | rax = *((rbx + 0x10)); 0x00416b04 mov qword [rbp + 0x10], rax | *((rbp + 0x10)) = rax; 0x00416b08 lea rdi, [rbp + 0x18] | 0x00416b0c lea rsi, [rbx + 0x18] | 0x00416b10 call 0x4166a0 | BloombergLP::bdlb::VariantImp,bsl::allocator>>>::VariantImp(BloombergLP::bdlb::VariantImp,bsl::allocator>>>const&,BloombergLP::bslma::Allocator*) (rbp + 0x18, rbx + 0x18, rdx); 0x00416b15 movsxd rdx, r12d | rdx = (int64_t) r12d; 0x00416b18 mov eax, dword [rbx + 0x58] | eax = *((rbx + 0x58)); 0x00416b1b mov dword [rbp + 0x58], eax | *((rbp + 0x58)) = eax; 0x00416b1e mov eax, dword [rbx + 0x5c] | eax = *((rbx + 0x5c)); 0x00416b21 mov dword [rbp + 0x5c], eax | *((rbp + 0x5c)) = eax; 0x00416b24 mov rdi, r15 | 0x00416b27 mov rsi, rbp | 0x00416b2a call 0x41a460 | rax = BloombergLP::bslalg::HashTableImpUtil::insertAtBackOfBucket(BloombergLP::bslalg::HashTableAnchor*,BloombergLP::bslalg::BidirectionalLink*,unsigned long) (r15, rbp, rdx); 0x00416b2f mov rbx, qword [rbx] | rbx = *(rbx); 0x00416b32 test rbx, rbx | | if (rbx != 0) { 0x00416b35 jne 0x416990 | goto label_0; | } 0x00416b3b jmp 0x416b52 | goto label_10; | label_8: 0x00416b3d mov rcx, rbp | rcx = rbp; 0x00416b40 cmp rsi, 0x2a0 | | if (rsi >= 0x2a0) { 0x00416b47 jae 0x416a40 | goto label_1; | } 0x00416b4d jmp 0x416aae | goto label_2; | label_10: 0x00416b52 add rsp, 0x18 | 0x00416b56 pop rbx | 0x00416b57 pop r12 | 0x00416b59 pop r13 | 0x00416b5b pop r14 | 0x00416b5d pop r15 | 0x00416b5f pop rbp | 0x00416b60 ret | return rax; | label_6: 0x00416b61 mov rcx, rax | rcx = rax; 0x00416b64 mov rsi, rbp | rsi = rbp; 0x00416b67 cmp rdx, 3 | | if (rdx >= 3) { 0x00416b6b jae 0x416950 | goto label_3; | } 0x00416b71 jmp 0x416979 | goto label_4; | label_5: 0x00416b76 call 0x41bfd0 | return BloombergLP::bsls::BslExceptionUtil::throwBadAlloc() (); | }