; assembly | /* r2dec pseudo code output */ | /* bdlc_flathashset.t/none @ 0x44d860 */ | #include | ; (fcn) sym._ZN11BloombergLP4bdlc13FlatHashTableIN3bsl12basic_stringIcNSt3__111char_traitsIcEENS2_9allocatorIcEEEES9_NS0_21FlatHashSet_Ent () | int64_t ZN11BloombergLP4bdlc13FlatHashTableIN3bsl12basic_stringIcNSt3_111char_traitsIcEENS2_9allocatorIcEEEES9_NS0_21FlatHashSet_Ent (size_t arg3, size_t arg2, size_t arg1) { | signed int64_t var_8h; | int64_t var_10h; | int64_t var_18h; | int64_t var_20h; | int64_t var_28h; | int64_t var_e8h; | int64_t var_148h; | int64_t var_150h; | rdx = arg3; | rsi = arg2; | rdi = arg1; 0x0044d860 push rbp | 0x0044d861 push r15 | 0x0044d863 push r14 | 0x0044d865 push r13 | 0x0044d867 push r12 | 0x0044d869 push rbx | 0x0044d86a sub rsp, 0x158 | 0x0044d871 mov r12, rdx | r12 = rdx; 0x0044d874 mov r15, rsi | r15 = rsi; 0x0044d877 mov r14, rdi | r14 = rdi; 0x0044d87a mov qword [rsp + 0x148], 0 | *((rsp + 0x148)) = 0; 0x0044d886 mov byte [rsp + 0x150], 0 | *((rsp + 0x150)) = 0; 0x0044d88e movdqa xmm0, xmmword [rip + 0x31b2a] | __asm ("movdqa xmm0, xmmword [0x0047f3c0]"); 0x0044d896 movdqu xmmword [rsp + 0xe8], xmm0 | __asm ("movdqu xmmword [rsp + 0xe8], xmm0"); 0x0044d89f mov rdx, qword [rdx + 0x18] | rdx = *((rdx + 0x18)); 0x0044d8a3 cmp qword [r12 + 0x20], 0x17 | 0x0044d8a9 mov rsi, r12 | rsi = r12; | if (*((r12 + 0x20)) != 0x17) { 0x0044d8ac je 0x44d8b2 | 0x0044d8ae mov rsi, qword [r12] | | } 0x0044d8b2 lea rbx, [rsp + 0x28] | rbx = rsp + 0x28; 0x0044d8b7 mov rdi, rbx | 0x0044d8ba call 0x456ef0 | BloombergLP::bslh::SpookyHashAlgorithmImp::update(voidconst*,unsigned long) (rbx, *(r12), rdx); 0x0044d8bf mov rax, qword [r12 + 0x18] | rax = *((r12 + 0x18)); 0x0044d8c4 mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x0044d8c9 lea rsi, [rsp + 8] | 0x0044d8ce mov edx, 8 | 0x0044d8d3 mov rdi, rbx | 0x0044d8d6 call 0x456ef0 | BloombergLP::bslh::SpookyHashAlgorithmImp::update(voidconst*,unsigned long) (rbx, rsp + 8, 8); 0x0044d8db lea rsi, [rsp + 8] | 0x0044d8e0 lea rdx, [rsp + 0x20] | 0x0044d8e5 mov rdi, rbx | 0x0044d8e8 call 0x456470 | BloombergLP::bslh::SpookyHashAlgorithmImp::finalize(unsigned long long*,unsigned long long*) (rbx, rsp + 8, rsp + 0x20); 0x0044d8ed movabs rbp, 0x9e3779b97f4a7c15 | 0x0044d8f7 imul rbp, qword [rsp + 8] | rbp *= *((rsp + 8)); 0x0044d8fd mov rdi, r15 | rdi = r15; 0x0044d900 mov rsi, r12 | rsi = r12; 0x0044d903 mov rdx, rbp | rdx = rbp; 0x0044d906 call 0x44ce20 | rax = BloombergLP::bdlc::FlatHashTable,bsl::allocator>,bsl::basic_string,bsl::allocator>,BloombergLP::bdlc::FlatHashSet_EntryUtil,bsl::allocator>>,BloombergLP::bslh::FibonacciBadHashWrapper,bsl::allocator>>>,bsl::equal_to,bsl::allocator>>>::findKey(bsl::basic_string,bsl::allocator>const&,unsigned long)const (); 0x0044d90b mov rbx, rax | rbx = rax; 0x0044d90e mov rax, qword [r15 + 0x18] | rax = *((r15 + 0x18)); 0x0044d912 cmp rbx, rax | | if (rbx != rax) { 0x0044d915 jne 0x44d9a0 | goto label_0; | } 0x0044d91b mov rax, rbx | rax = rbx; 0x0044d91e shr rax, 3 | rax >>= 3; 0x0044d922 lea rcx, [rax*8] | rcx = rax*8; 0x0044d92a sub rcx, rax | rcx -= rax; 0x0044d92d cmp qword [r15 + 0x10], rcx | | if (*((r15 + 0x10)) >= rcx) { 0x0044d931 jb 0x44d94f | 0x0044d933 lea rax, [rbx + rbx] | rax = rbx + rbx; 0x0044d937 test rbx, rbx | 0x0044d93a mov esi, 0x20 | esi = 0x20; | if (rbx != 0) { 0x0044d93f cmovne rsi, rax | rsi = rax; | } 0x0044d943 mov rdi, r15 | rdi = r15; 0x0044d946 call 0x44cfa0 | BloombergLP::bdlc::FlatHashTable,bsl::allocator>,bsl::basic_string,bsl::allocator>,BloombergLP::bdlc::FlatHashSet_EntryUtil,bsl::allocator>>,BloombergLP::bslh::FibonacciBadHashWrapper,bsl::allocator>>>,bsl::equal_to,bsl::allocator>>>::rehashRaw(unsigned long) (); 0x0044d94b mov rbx, qword [r15 + 0x18] | rbx = *((r15 + 0x18)); | } 0x0044d94f test rbx, rbx | 0x0044d952 mov qword [rsp + 0x18], r14 | *((rsp + 0x18)) = r14; 0x0044d957 mov qword [rsp + 0x10], rbp | *((rsp + 0x10)) = rbp; | if (rbx == 0) { 0x0044d95c je 0x44d9a7 | goto label_1; | } 0x0044d95e mov cl, byte [r15 + 0x20] | cl = *((r15 + 0x20)); 0x0044d962 mov rax, rbp | rax = rbp; 0x0044d965 shr rax, cl | rax >>= cl; 0x0044d968 mov rcx, qword [r15 + 8] | rcx = *((r15 + 8)); 0x0044d96c shl rax, 4 | rax <<= 4; 0x0044d970 lea rdx, [rbx - 1] | rdx = rbx - 1; 0x0044d974 xor esi, esi | esi = 0; 0x0044d976 nop word cs:[rax + rax] | | do { 0x0044d980 movdqu xmm0, xmmword [rcx + rax] | __asm ("movdqu xmm0, xmmword [rcx + rax]"); 0x0044d985 pmovmskb edi, xmm0 | __asm ("pmovmskb edi, xmm0"); 0x0044d989 test di, di | | if (di != 0) { 0x0044d98c jne 0x44d9ab | goto label_2; | } 0x0044d98e add rax, 0x10 | rax += 0x10; 0x0044d992 and rax, rdx | rax &= rdx; 0x0044d995 add rsi, 0x10 | rsi += 0x10; 0x0044d999 cmp rsi, rbx | 0x0044d99c jb 0x44d980 | | } while (rsi < rbx); 0x0044d99e jmp 0x44d9b7 | goto label_3; | label_0: 0x0044d9a0 xor ecx, ecx | ecx = 0; 0x0044d9a2 jmp 0x44da95 | goto label_4; | label_1: 0x0044d9a7 xor ebx, ebx | ebx = 0; 0x0044d9a9 jmp 0x44d9b7 | goto label_3; | label_2: 0x0044d9ab movzx ecx, di | ecx = (int32_t) di; 0x0044d9ae bsf ecx, ecx | __asm ("bsf ecx, ecx"); 0x0044d9b1 add rax, rcx | rax += rcx; 0x0044d9b4 mov rbx, rax | rbx = rax; | label_3: 0x0044d9b7 mov r14, qword [r15] | r14 = *(r15); 0x0044d9ba mov rdi, qword [r15 + 0x28] | rdi = *((r15 + 0x28)); 0x0044d9be lea r13, [rbx + rbx*2] | r13 = rbx * 3; 0x0044d9c2 shl r13, 4 | r13 <<= 4; 0x0044d9c6 lea rbp, [r14 + r13] | rbp = r14 + r13; 0x0044d9ca test rdi, rdi | | if (rdi == 0) { 0x0044d9cd jne 0x44d9e3 | 0x0044d9cf mov rdi, qword [rip + 0x2550b2] | rdi = BloombergLP::bslma::Default::s_defaultAllocator; 0x0044d9d6 test rdi, rdi | | if (rdi != 0) { 0x0044d9d9 jne 0x44d9e3 | goto label_5; | } 0x0044d9db call 0x457f90 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x0044d9e0 mov rdi, rax | rdi = rax; | } | label_5: 0x0044d9e3 mov rax, qword [r12 + 0x20] | rax = *((r12 + 0x20)); 0x0044d9e8 mov qword [rbp + 0x20], rax | *((rbp + 0x20)) = rax; 0x0044d9ec movdqu xmm0, xmmword [r12] | __asm ("movdqu xmm0, xmmword [r12]"); 0x0044d9f2 movups xmm1, xmmword [r12 + 0x10] | __asm ("movups xmm1, xmmword [r12 + 0x10]"); 0x0044d9f8 movups xmmword [rbp + 0x10], xmm1 | __asm ("movups xmmword [rbp + 0x10], xmm1"); 0x0044d9fc movdqu xmmword [rbp], xmm0 | __asm ("movdqu xmmword [rbp], xmm0"); 0x0044da01 mov qword [r14 + r13 + 0x28], rdi | *((r14 + r13 + 0x28)) = rdi; 0x0044da06 cmp qword [r14 + r13 + 0x20], 0x17 | | if (*((r14 + r13 + 0x20)) != 0x17) { 0x0044da0c je 0x44da77 | 0x0044da0e lea rcx, [r14 + r13 + 0x20] | rcx = r14 + r13 + 0x20; 0x0044da13 mov rax, qword [r12 + 0x18] | rax = *((r12 + 0x18)); 0x0044da18 cmp rax, 0x17 | 0x0044da1c mov esi, 0x17 | esi = 0x17; | if (rax > 0x17) { 0x0044da21 cmova rsi, rax | rsi = rax; | } 0x0044da25 mov qword [rbp], 0 | *(rbp) = 0; 0x0044da2d mov qword [r14 + r13 + 0x18], rax | *((r14 + r13 + 0x18)) = rax; 0x0044da32 mov qword [rcx], rsi | *(rcx) = rsi; 0x0044da35 cmp rax, 0x18 | | if (rax >= 0x18) { 0x0044da39 jb 0x44da54 | 0x0044da3b inc rsi | rsi++; 0x0044da3e mov rax, qword [rdi] | rax = *(rdi); 0x0044da41 mov r14, rcx | r14 = rcx; 0x0044da44 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x0044da47 mov rcx, r14 | rcx = r14; 0x0044da4a mov qword [rbp], rax | *(rbp) = rax; 0x0044da4e cmp qword [r14], 0x17 | | if (*(r14) != 0x17) { 0x0044da52 jne 0x44da57 | goto label_6; | } | } 0x0044da54 mov rax, rbp | rax = rbp; | label_6: 0x0044da57 mov rdx, qword [rcx - 8] | rdx = *((rcx - 8)); 0x0044da5b inc rdx | rdx++; | if (rdx == 0) { 0x0044da5e je 0x44da77 | goto label_7; | } 0x0044da60 cmp qword [r12 + 0x20], 0x17 | | if (*((r12 + 0x20)) != 0x17) { 0x0044da66 je 0x44da6c | 0x0044da68 mov r12, qword [r12] | r12 = *(r12); | } 0x0044da6c mov rdi, rax | 0x0044da6f mov rsi, r12 | 0x0044da72 call 0x403e80 | memcpy (rax, r12, rdx); | } | label_7: 0x0044da77 mov rcx, qword [rsp + 0x10] | rcx = *((rsp + 0x10)); 0x0044da7c and cl, 0x7f | cl &= 0x7f; 0x0044da7f mov rax, qword [r15 + 8] | rax = *((r15 + 8)); 0x0044da83 mov byte [rax + rbx], cl | *((rax + rbx)) = cl; 0x0044da86 inc qword [r15 + 0x10] | *((r15 + 0x10))++; 0x0044da8a mov rax, qword [r15 + 0x18] | rax = *((r15 + 0x18)); 0x0044da8e mov cl, 1 | cl = 1; 0x0044da90 mov r14, qword [rsp + 0x18] | r14 = *((rsp + 0x18)); | label_4: 0x0044da95 lea rdx, [rbx + rbx*2] | rdx = rbx * 3; 0x0044da99 shl rdx, 4 | rdx <<= 4; 0x0044da9d add rdx, qword [r15] | rdx += *(r15); 0x0044daa0 mov rsi, qword [r15 + 8] | rsi = *((r15 + 8)); 0x0044daa4 add rsi, rbx | rsi += rbx; 0x0044daa7 not rbx | rbx = ~rbx; 0x0044daaa add rbx, rax | rbx += rax; 0x0044daad mov qword [r14], rdx | *(r14) = rdx; 0x0044dab0 mov qword [r14 + 8], rsi | *((r14 + 8)) = rsi; 0x0044dab4 mov qword [r14 + 0x10], rbx | *((r14 + 0x10)) = rbx; 0x0044dab8 mov byte [r14 + 0x18], cl | *((r14 + 0x18)) = cl; 0x0044dabc mov rax, r14 | rax = r14; 0x0044dabf add rsp, 0x158 | 0x0044dac6 pop rbx | 0x0044dac7 pop r12 | 0x0044dac9 pop r13 | 0x0044dacb pop r14 | 0x0044dacd pop r15 | 0x0044dacf pop rbp | 0x0044dad0 ret | return rax; | }