; assembly | /* r2dec pseudo code output */ | /* ball_defaultattributecontainer.t/assume @ 0x416940 */ | #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*) */ 0x00416940 push rbp | 0x00416941 push r15 | 0x00416943 push r14 | 0x00416945 push r13 | 0x00416947 push r12 | 0x00416949 push rbx | 0x0041694a sub rsp, 0x18 | 0x0041694e mov r13, rsi | r13 = rsi; 0x00416951 mov r14, rdi | r14 = rdi; 0x00416954 mov rsi, qword [rdi + 0x40] | 0x00416958 movss xmm0, dword [rdi + 0x50] | xmm0 = *((rdi + 0x50)); 0x0041695d cvtss2sd xmm0, xmm0 | __asm ("cvtss2sd xmm0, xmm0"); 0x00416961 lea rdi, [rsp + 0x10] | 0x00416966 mov edx, 2 | 0x0041696b call 0x41c3a0 | rax = BloombergLP::bslstl::HashTable_ImpDetails::growBucketsForLoadFactor(unsigned long*,unsigned long,unsigned long,double) (rsp + 0x10, *((rdi + 0x40)), 2); 0x00416970 mov r15, rax | r15 = rax; 0x00416973 mov qword [r14 + 0x38], 0 | *((r14 + 0x38)) = 0; 0x0041697b shr rax, 0x3c | rax >>= 0x3c; | if (rax != 0) { 0x0041697f jne 0x416a87 | goto label_2; | } 0x00416985 mov rdi, qword [r14 + 8] | rdi = *((r14 + 8)); 0x00416989 mov rsi, r15 | rsi = r15; 0x0041698c shl rsi, 4 | rsi <<= 4; 0x00416990 mov rax, qword [rdi] | rax = *(rdi); 0x00416993 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x00416996 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x00416999 movaps xmmword [rsp], xmm0 | *(rsp) = xmm0; 0x0041699d test r15, r15 | | if (r15 == 0) { 0x004169a0 je 0x416a09 | goto label_1; | } 0x004169a2 lea rdx, [r15 - 1] | rdx = r15 - 1; 0x004169a6 mov rsi, r15 | rsi = r15; 0x004169a9 and rsi, 3 | rsi &= 3; | if (rsi == 0) { 0x004169ad je 0x416a75 | goto label_3; | } 0x004169b3 xor edi, edi | edi = 0; 0x004169b5 mov rcx, rax | rcx = rax; 0x004169b8 nop dword [rax + rax] | | do { 0x004169c0 movaps xmm0, xmmword [rsp] | xmm0 = *(rsp); 0x004169c4 movups xmmword [rcx], xmm0 | __asm ("movups xmmword [rcx], xmm0"); 0x004169c7 add rcx, 0x10 | rcx += 0x10; 0x004169cb inc rdi | rdi++; 0x004169ce cmp rsi, rdi | 0x004169d1 jne 0x4169c0 | | } while (rsi != rdi); 0x004169d3 mov rsi, r15 | rsi = r15; 0x004169d6 sub rsi, rdi | rsi -= rdi; 0x004169d9 cmp rdx, 3 | | if (rdx < 3) { 0x004169dd jb 0x416a09 | goto label_1; | } 0x004169df nop | | do { | label_0: 0x004169e0 movaps xmm0, xmmword [rsp] | xmm0 = *(rsp); 0x004169e4 movups xmmword [rcx], xmm0 | __asm ("movups xmmword [rcx], xmm0"); 0x004169e7 movaps xmm0, xmmword [rsp] | xmm0 = *(rsp); 0x004169eb movups xmmword [rcx + 0x10], xmm0 | __asm ("movups xmmword [rcx + 0x10], xmm0"); 0x004169ef movaps xmm0, xmmword [rsp] | xmm0 = *(rsp); 0x004169f3 movups xmmword [rcx + 0x20], xmm0 | __asm ("movups xmmword [rcx + 0x20], xmm0"); 0x004169f7 movaps xmm0, xmmword [rsp] | xmm0 = *(rsp); 0x004169fb movups xmmword [rcx + 0x30], xmm0 | __asm ("movups xmmword [rcx + 0x30], xmm0"); 0x004169ff add rcx, 0x40 | rcx += 0x40; 0x00416a03 add rsi, 0xfffffffffffffffc | rsi += 0xfffffffffffffffc; 0x00416a07 jne 0x4169e0 | | } while (rsi != 0); | label_1: 0x00416a09 lea r12, [r14 + 0x28] | r12 = r14 + 0x28; 0x00416a0d mov qword [r14 + 0x28], rax | *((r14 + 0x28)) = rax; 0x00416a11 mov qword [r14 + 0x30], r15 | *((r14 + 0x30)) = r15; 0x00416a15 lea r15, [r14 + 8] | r15 = r14 + 8; 0x00416a19 mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x00416a1e mov qword [r14 + 0x48], rax | *((r14 + 0x48)) = rax; 0x00416a22 nop word cs:[rax + rax] | 0x00416a2c nop dword [rax] | | do { 0x00416a30 lea rbx, [r13 + 0x10] | rbx = r13 + 0x10; 0x00416a34 mov esi, dword [rip + 0x245aa6] | 0x00416a3a mov rdi, rbx | 0x00416a3d call 0x417b40 | eax = BloombergLP::ball::Attribute::hash(BloombergLP::ball::Attributeconst&,int) (rbx, *(obj.BloombergLP::ball::DefaultAttributeContainer::AttributeHash::s_hashtableSize)); 0x00416a42 mov ebp, eax | 0x00416a44 mov rdi, r15 | 0x00416a47 mov rsi, rbx | 0x00416a4a call 0x416250 | rax = BloombergLP::bslalg::BidirectionalLink*BloombergLP::bslstl::BidirectionalNodePool>>::emplaceIntoNewNode(BloombergLP::ball::Attributeconst&) (r15, rbx); 0x00416a4f movsxd rdx, ebp | rdx = (int64_t) ebp; 0x00416a52 mov rdi, r12 | 0x00416a55 mov rsi, rax | 0x00416a58 call 0x41a3a0 | rax = BloombergLP::bslalg::HashTableImpUtil::insertAtBackOfBucket(BloombergLP::bslalg::HashTableAnchor*,BloombergLP::bslalg::BidirectionalLink*,unsigned long) (r12, rax, rdx); 0x00416a5d mov r13, qword [r13] | r13 = *(r13); 0x00416a61 test r13, r13 | 0x00416a64 jne 0x416a30 | | } while (r13 != 0); 0x00416a66 add rsp, 0x18 | 0x00416a6a pop rbx | 0x00416a6b pop r12 | 0x00416a6d pop r13 | 0x00416a6f pop r14 | 0x00416a71 pop r15 | 0x00416a73 pop rbp | 0x00416a74 ret | return rax; | label_3: 0x00416a75 mov rcx, rax | rcx = rax; 0x00416a78 mov rsi, r15 | rsi = r15; 0x00416a7b cmp rdx, 3 | | if (rdx >= 3) { 0x00416a7f jae 0x4169e0 | goto label_0; | } 0x00416a85 jmp 0x416a09 | goto label_1; | label_2: 0x00416a87 call 0x41bf10 | return BloombergLP::bsls::BslExceptionUtil::throwBadAlloc() (); | }