; assembly | /* r2dec pseudo code output */ | /* bdlc_flathashset.t/assume @ 0x44cea0 */ | #include | | uint32_t rotate_left32 (uint32_t value, uint32_t count) { | const uint32_t mask = (CHAR_BIT * sizeof (value)) - 1; | count &= mask; | return (value << count) | (value >> (-count & mask)); | } | ; (fcn) sym.BloombergLP::bdlc::FlatHashTable_bsl::basic_string_char__std::__1::char_traits_char___bsl::allocator_char_____bsl::basic_string_char__std::__1::char_traits_char___bsl::allocator_char_____BloombergLP::bdlc::FlatHashSet_EntryUtil_bsl::basic_string_char__std::__1::char_traits_char___bsl::allocator_char_______BloombergLP::bslh::FibonacciBadHashWrapper_bsl::hash_bsl::basic_string_char__std::__1::char_traits_char___bsl::allocator_char_________bsl::equal_to_bsl::basic_string_char__std::__1::char_traits_char___bsl::allocator_char_______::rehashRaw_unsigned_long_ () | int64_t BloombergLP::bdlc::FlatHashTable_bsl::basic_string_char_std::_1::char_traits_char_bsl::allocator_char_bsl::basic_string_char_std::_1::char_traits_char_bsl::allocator_char_BloombergLP::bdlc::FlatHashSet_EntryUtil_bsl::basic_string_char_std::_1::char_traits_char_bsl::allocator_char_BloombergLP::bslh::FibonacciBadHashWrapper_bsl::hash_bsl::basic_string_char_std::_1::char_traits_char_bsl::allocator_char_bsl::equal_to_bsl::basic_string_char_std::_1::char_traits_char_bsl::allocator_char_::rehashRaw_unsigned_long_ (int64_t arg2, int64_t arg1) { | int64_t var_8h; | void ** s; | int64_t var_18h; | int64_t var_20h; | int64_t var_28h; | int64_t var_30h; | int64_t var_38h; | int64_t var_40h; | int64_t var_48h; | int64_t var_50h; | int64_t var_58h; | int64_t var_60h; | int64_t var_68h; | int64_t var_128h; | int64_t var_188h; | int64_t var_190h; | rsi = arg2; | rdi = arg1; | /* 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) */ 0x0044cea0 push rbp | 0x0044cea1 push r15 | 0x0044cea3 push r14 | 0x0044cea5 push r13 | 0x0044cea7 push r12 | 0x0044cea9 push rbx | 0x0044ceaa sub rsp, 0x198 | 0x0044ceb1 mov rbx, rsi | rbx = rsi; 0x0044ceb4 mov rax, qword [rdi + 0x28] | rax = *((rdi + 0x28)); 0x0044ceb8 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0044cebd test rax, rax | | if (rax == 0) { 0x0044cec0 jne 0x44ced7 | 0x0044cec2 mov rax, qword [rip + 0x255bbf] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x0044cec9 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0044cece test rax, rax | | if (rax == 0) { 0x0044ced1 je 0x44cf7b | goto label_5; | } | } 0x0044ced7 test rbx, rbx | | if (rbx == 0) { 0x0044ceda je 0x44cf94 | goto label_6; | } | do { 0x0044cee0 mov ebp, 0x20 | 0x0044cee5 cmp rbx, 0x21 | | if (rbx >= 0x21) { 0x0044cee9 jb 0x44cf0f | 0x0044ceeb dec rbx | rbx--; 0x0044ceee or rbx, 1 | rbx |= 1; 0x0044cef2 bsr rax, rbx | __asm ("bsr rax, rbx"); 0x0044cef6 xor rax, 0x3f | rax ^= 0x3f; 0x0044cefa mov ecx, eax | ecx = eax; 0x0044cefc neg cl | cl = -cl; 0x0044cefe mov ebp, 1 | 0x0044cf03 shl rbp, cl | rbp <<= cl; 0x0044cf06 test rax, rax | | if (rax == 0) { 0x0044cf09 je 0x44d1ee | goto label_7; | } | } | label_4: 0x0044cf0f mov r14, rdi | r14 = rdi; 0x0044cf12 mov rax, rbp | rax = rbp; 0x0044cf15 shl rax, 4 | rax <<= 4; 0x0044cf19 lea rsi, [rax + rax*2] | rsi = rax * 3; 0x0044cf1d mov rbx, qword [rsp + 0x10] | rbx = *((rsp + 0x10)); 0x0044cf22 mov rax, qword [rbx] | rax = *(rbx); 0x0044cf25 mov rdi, rbx | rdi = rbx; 0x0044cf28 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x0044cf2b mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x0044cf30 mov rax, qword [rbx] | rax = *(rbx); 0x0044cf33 mov rdi, rbx | rdi = rbx; 0x0044cf36 mov rsi, rbp | rsi = rbp; 0x0044cf39 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x0044cf3c mov r12, rax | r12 = rax; 0x0044cf3f mov rbx, rbp | rbx = rbp; 0x0044cf42 mov rax, rbp | rax = rbp; 0x0044cf45 shr rax, 4 | rax >>= 4; 0x0044cf49 dec rax | rax--; 0x0044cf4c mov rcx, rax | rcx = rax; 0x0044cf4f or rcx, 1 | rcx |= 1; 0x0044cf53 bsr rcx, rcx | __asm ("bsr rcx, rcx"); 0x0044cf57 xor ecx, 0x3f | ecx ^= 0x3f; 0x0044cf5a cmp rax, 1 | 0x0044cf5e adc ecx, 0 | ecx += 0; 0x0044cf61 mov qword [rsp + 0x20], rcx | *((rsp + 0x20)) = rcx; 0x0044cf66 mov rdi, r12 | 0x0044cf69 mov esi, 0x80 | 0x0044cf6e mov rdx, rbp | 0x0044cf71 call 0x403820 | memset (r12, 0x80, rbp); 0x0044cf76 mov rdi, r14 | rdi = r14; 0x0044cf79 jmp 0x44cfa7 | goto label_8; | label_5: 0x0044cf7b mov rbp, rdi | 0x0044cf7e call 0x457e60 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x0044cf83 mov rdi, rbp | rdi = rbp; 0x0044cf86 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0044cf8b test rbx, rbx | 0x0044cf8e jne 0x44cee0 | | } while (rbx != 0); | label_6: 0x0044cf94 xor eax, eax | eax = 0; 0x0044cf96 mov qword [rsp + 0x20], rax | *((rsp + 0x20)) = rax; 0x0044cf9b xor ebx, ebx | ebx = 0; 0x0044cf9d xor r12d, r12d | r12d = 0; 0x0044cfa0 xor eax, eax | eax = 0; 0x0044cfa2 mov qword [rsp + 8], rax | *((rsp + 8)) = rax; | label_8: 0x0044cfa7 mov rax, qword [rdi + 0x18] | rax = *((rdi + 0x18)); 0x0044cfab test rax, rax | 0x0044cfae mov qword [rsp + 0x18], r12 | *((rsp + 0x18)) = r12; | if (rax == 0) { 0x0044cfb3 je 0x44d19c | goto label_9; | } 0x0044cfb9 mov ecx, dword [rsp + 0x20] | ecx = *((rsp + 0x20)); 0x0044cfbd mov qword [rsp + 0x40], rcx | *((rsp + 0x40)) = rcx; 0x0044cfc2 lea r14, [rbx - 1] | r14 = rbx - 1; 0x0044cfc6 xor edx, edx | edx = 0; 0x0044cfc8 lea r8, [rsp + 0x68] | r8 = rsp + 0x68; 0x0044cfcd xor esi, esi | esi = 0; 0x0044cfcf mov qword [rsp + 0x48], rdi | *((rsp + 0x48)) = rdi; 0x0044cfd4 jmp 0x44cff6 | goto label_10; | label_0: 0x0044cfe0 mov rax, qword [rdi + 0x18] | rax = *((rdi + 0x18)); 0x0044cfe4 mov rdx, qword [rsp + 0x38] | rdx = *((rsp + 0x38)); | do { 0x0044cfe9 add rdx, 0x10 | rdx += 0x10; 0x0044cfed cmp rdx, rax | | if (rdx >= rax) { 0x0044cff0 jae 0x44d19e | goto label_11; | } | label_10: 0x0044cff6 mov rbp, qword [rdi + 8] | rbp = *((rdi + 8)); 0x0044cffa movdqu xmm0, xmmword [rbp + rdx] | __asm ("movdqu xmm0, xmmword [rbp + rdx]"); 0x0044d000 pmovmskb ecx, xmm0 | __asm ("pmovmskb ecx, xmm0"); 0x0044d004 cmp cx, 0xffff | 0x0044d008 je 0x44cfe9 | | } while (cx == 0xffff); 0x0044d00a add rbp, rdx | rbp += rdx; 0x0044d00d mov qword [rsp + 0x38], rdx | *((rsp + 0x38)) = rdx; 0x0044d012 lea rdx, [rdx + rdx*2] | rdx *= 3; 0x0044d016 shl rdx, 4 | rdx <<= 4; 0x0044d01a add rdx, qword [rdi] | rdx += *(rdi); 0x0044d01d not ecx | ecx = ~ecx; 0x0044d01f movzx r15d, cx | r15d = (int32_t) cx; 0x0044d023 mov qword [rsp + 0x50], rbp | *((rsp + 0x50)) = rbp; 0x0044d028 jmp 0x44d092 | goto label_12; | label_2: 0x0044d030 movzx ecx, si | ecx = (int32_t) si; 0x0044d033 bsf ecx, ecx | __asm ("bsf ecx, ecx"); 0x0044d036 add rdx, rcx | rdx += rcx; | label_1: 0x0044d039 lea rcx, [rdx + rdx*2] | rcx = rdx * 3; 0x0044d03d shl rcx, 4 | rcx <<= 4; 0x0044d041 movdqu xmm0, xmmword [r12] | __asm ("movdqu xmm0, xmmword [r12]"); 0x0044d047 movups xmm1, xmmword [r12 + 0x10] | __asm ("movups xmm1, xmmword [r12 + 0x10]"); 0x0044d04d movups xmm2, xmmword [r12 + 0x20] | __asm ("movups xmm2, xmmword [r12 + 0x20]"); 0x0044d053 mov rsi, qword [rsp + 8] | rsi = *((rsp + 8)); 0x0044d058 movups xmmword [rsi + rcx + 0x20], xmm2 | __asm ("movups xmmword [rsi + rcx + 0x20], xmm2"); 0x0044d05d movups xmmword [rsi + rcx + 0x10], xmm1 | __asm ("movups xmmword [rsi + rcx + 0x10], xmm1"); 0x0044d062 movdqu xmmword [rsi + rcx], xmm0 | __asm ("movdqu xmmword [rsi + rcx], xmm0"); 0x0044d067 and al, 0x7f | al &= 0x7f; 0x0044d069 mov r12, qword [rsp + 0x18] | r12 = *((rsp + 0x18)); 0x0044d06e mov byte [r12 + rdx], al | *((r12 + rdx)) = al; 0x0044d072 mov rsi, qword [rsp + 0x28] | rsi = *((rsp + 0x28)); 0x0044d077 inc rsi | rsi++; 0x0044d07a mov eax, 0xfffffffe | eax = 0xfffffffe; 0x0044d07f mov rcx, qword [rsp + 0x58] | rcx = *((rsp + 0x58)); 0x0044d084 rol eax, cl | eax = rotate_left32 (eax, cl); 0x0044d086 and r15d, eax | r15d &= eax; 0x0044d089 mov rdx, r13 | rdx = r13; | if (r15d == 0) { 0x0044d08c je 0x44cfe0 | goto label_0; | } | label_12: 0x0044d092 mov qword [rsp + 0x28], rsi | *((rsp + 0x28)) = rsi; 0x0044d097 bsf ecx, r15d | __asm ("bsf ecx, r15d"); 0x0044d09b lea rax, [rcx + rcx*2] | rax = rcx * 3; 0x0044d09f shl rax, 4 | rax <<= 4; 0x0044d0a3 lea r12, [rdx + rax] | r12 = rdx + rax; 0x0044d0a7 mov qword [rsp + 0x58], rcx | *((rsp + 0x58)) = rcx; 0x0044d0ac mov byte [rbp + rcx], 0xc0 | *((rbp + rcx)) = 0xc0; 0x0044d0b1 dec qword [rdi + 0x10] | *((rdi + 0x10))--; 0x0044d0b5 mov qword [rsp + 0x188], 0 | *((rsp + 0x188)) = 0; 0x0044d0c1 mov byte [rsp + 0x190], 0 | *((rsp + 0x190)) = 0; 0x0044d0c9 movdqa xmm0, xmmword [rip + 0x3216f] | __asm ("movdqa xmm0, xmmword [0x0047f240]"); 0x0044d0d1 movdqu xmmword [rsp + 0x128], xmm0 | __asm ("movdqu xmmword [rsp + 0x128], xmm0"); 0x0044d0da cmp qword [rdx + rax + 0x20], 0x17 | 0x0044d0e0 mov rsi, r12 | rsi = r12; | if (*((rdx + rax + 0x20)) != 0x17) { 0x0044d0e3 je 0x44d0e9 | 0x0044d0e5 mov rsi, qword [rdx + rax] | | } 0x0044d0e9 mov r13, rdx | r13 = rdx; 0x0044d0ec mov rdx, qword [rdx + rax + 0x18] | 0x0044d0f1 mov rdi, r8 | rdi = r8; 0x0044d0f4 mov rbp, r8 | 0x0044d0f7 call 0x456da0 | BloombergLP::bslh::SpookyHashAlgorithmImp::update(voidconst*,unsigned long) (rdi, *((rdx + rax)), *((rdx + rax + 0x18))); 0x0044d0fc mov rax, qword [r12 + 0x18] | rax = *((r12 + 0x18)); 0x0044d101 mov qword [rsp + 0x30], rax | *((rsp + 0x30)) = rax; 0x0044d106 mov edx, 8 | 0x0044d10b mov rdi, rbp | 0x0044d10e lea rsi, [rsp + 0x30] | 0x0044d113 call 0x456da0 | BloombergLP::bslh::SpookyHashAlgorithmImp::update(voidconst*,unsigned long) (rbp, rsp + 0x30, 8); 0x0044d118 mov rdi, rbp | 0x0044d11b lea rsi, [rsp + 0x30] | 0x0044d120 lea rdx, [rsp + 0x60] | 0x0044d125 call 0x456320 | BloombergLP::bslh::SpookyHashAlgorithmImp::finalize(unsigned long long*,unsigned long long*) (rbp, rsp + 0x30, rsp + 0x60); 0x0044d12a mov rax, qword [rsp + 0x30] | rax = *((rsp + 0x30)); 0x0044d12f movabs rcx, 0x9e3779b97f4a7c15 | rcx = 0x9e3779b97f4a7c15; 0x0044d139 imul rax, rcx | rax *= rcx; 0x0044d13d test rbx, rbx | 0x0044d140 mov rdi, qword [rsp + 0x48] | rdi = *((rsp + 0x48)); 0x0044d145 mov r8, rbp | r8 = rbp; 0x0044d148 mov rbp, qword [rsp + 0x50] | rbp = *((rsp + 0x50)); | if (rbx == 0) { 0x0044d14d je 0x44d039 | goto label_1; | } 0x0044d153 mov rdx, rax | rdx = rax; 0x0044d156 mov rcx, qword [rsp + 0x40] | rcx = *((rsp + 0x40)); 0x0044d15b shr rdx, cl | rdx >>= cl; 0x0044d15e shl rdx, 4 | rdx <<= 4; 0x0044d162 xor ecx, ecx | ecx = 0; 0x0044d164 nop word cs:[rax + rax] | 0x0044d16e nop | | label_3: 0x0044d170 mov rsi, qword [rsp + 0x18] | rsi = *((rsp + 0x18)); 0x0044d175 movdqu xmm0, xmmword [rsi + rdx] | __asm ("movdqu xmm0, xmmword [rsi + rdx]"); 0x0044d17a pmovmskb esi, xmm0 | __asm ("pmovmskb esi, xmm0"); 0x0044d17e test si, si | | if (si != 0) { 0x0044d181 jne 0x44d030 | goto label_2; | } 0x0044d187 add rdx, 0x10 | rdx += 0x10; 0x0044d18b and rdx, r14 | rdx &= r14; 0x0044d18e add rcx, 0x10 | rcx += 0x10; 0x0044d192 cmp rcx, rbx | | if (rcx < rbx) { 0x0044d195 jb 0x44d170 | goto label_3; | } 0x0044d197 jmp 0x44d039 | goto label_1; | label_9: 0x0044d19c xor esi, esi | esi = 0; | label_11: 0x0044d19e mov r14, rsi | r14 = rsi; 0x0044d1a1 mov rsi, qword [rdi] | rsi = *(rdi); 0x0044d1a4 mov rbp, rdi | 0x0044d1a7 mov rdi, qword [rdi + 0x28] | rdi = *((rdi + 0x28)); 0x0044d1ab mov rax, qword [rdi] | rax = *(rdi); 0x0044d1ae call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0044d1b1 mov rsi, qword [rbp + 8] | rsi = *((rbp + 8)); 0x0044d1b5 mov rdi, qword [rbp + 0x28] | rdi = *((rbp + 0x28)); 0x0044d1b9 mov rax, qword [rdi] | rax = *(rdi); 0x0044d1bc call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0044d1bf mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x0044d1c4 mov qword [rbp], rax | *(rbp) = rax; 0x0044d1c8 mov qword [rbp + 8], r12 | *((rbp + 8)) = r12; 0x0044d1cc mov qword [rbp + 0x10], r14 | *((rbp + 0x10)) = r14; 0x0044d1d0 mov qword [rbp + 0x18], rbx | *((rbp + 0x18)) = rbx; 0x0044d1d4 mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x0044d1d9 mov dword [rbp + 0x20], eax | *((rbp + 0x20)) = eax; 0x0044d1dc add rsp, 0x198 | 0x0044d1e3 pop rbx | 0x0044d1e4 pop r12 | 0x0044d1e6 pop r13 | 0x0044d1e8 pop r14 | 0x0044d1ea pop r15 | 0x0044d1ec pop rbp | 0x0044d1ed ret | return rax; | label_7: 0x0044d1ee xor ebp, ebp | ebp = 0; 0x0044d1f0 jmp 0x44cf0f | goto label_4; | }