; assembly | /* r2dec pseudo code output */ | /* bdlc_flathashset.t/none @ 0x44cfa0 */ | #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) { | void ** s; | int64_t var_10h; | uint32_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) */ 0x0044cfa0 push rbp | 0x0044cfa1 push r15 | 0x0044cfa3 push r14 | 0x0044cfa5 push r13 | 0x0044cfa7 push r12 | 0x0044cfa9 push rbx | 0x0044cfaa sub rsp, 0x198 | 0x0044cfb1 mov rbx, rsi | rbx = rsi; 0x0044cfb4 mov r8, rdi | r8 = rdi; 0x0044cfb7 mov rax, qword [rdi + 0x28] | rax = *((rdi + 0x28)); 0x0044cfbb mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x0044cfc0 test rax, rax | | if (rax == 0) { 0x0044cfc3 jne 0x44cfda | 0x0044cfc5 mov rax, qword [rip + 0x255abc] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x0044cfcc mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x0044cfd1 test rax, rax | | if (rax == 0) { 0x0044cfd4 je 0x44d079 | goto label_4; | } | } 0x0044cfda test rbx, rbx | | if (rbx == 0) { 0x0044cfdd je 0x44d092 | goto label_5; | } | do { 0x0044cfe3 mov r13d, 0x20 | r13d = 0x20; 0x0044cfe9 cmp rbx, 0x21 | | if (rbx >= 0x21) { 0x0044cfed jb 0x44d014 | 0x0044cfef dec rbx | rbx--; 0x0044cff2 or rbx, 1 | rbx |= 1; 0x0044cff6 bsr rax, rbx | __asm ("bsr rax, rbx"); 0x0044cffa xor rax, 0x3f | rax ^= 0x3f; 0x0044cffe mov ecx, eax | ecx = eax; 0x0044d000 neg cl | cl = -cl; 0x0044d002 mov r13d, 1 | r13d = 1; 0x0044d008 shl r13, cl | r13 <<= cl; 0x0044d00b test rax, rax | | if (rax == 0) { 0x0044d00e je 0x44d311 | goto label_6; | } | } | label_3: 0x0044d014 mov r14, r8 | r14 = r8; 0x0044d017 mov rax, r13 | rax = r13; 0x0044d01a shl rax, 4 | rax <<= 4; 0x0044d01e lea rsi, [rax + rax*2] | rsi = rax * 3; 0x0044d022 mov rbx, qword [rsp + 8] | rbx = *((rsp + 8)); 0x0044d027 mov rax, qword [rbx] | rax = *(rbx); 0x0044d02a mov rdi, rbx | rdi = rbx; 0x0044d02d call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x0044d030 mov qword [rsp], rax | 0x0044d034 mov rax, qword [rbx] | rax = *(rbx); 0x0044d037 mov rdi, rbx | rdi = rbx; 0x0044d03a mov rsi, r13 | rsi = r13; 0x0044d03d call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)(void) (rax); 0x0044d040 mov rdx, r13 | rdx = r13; 0x0044d043 shr rdx, 4 | rdx >>= 4; 0x0044d047 dec rdx | rdx--; 0x0044d04a mov rcx, rdx | rcx = rdx; 0x0044d04d or rcx, 1 | rcx |= 1; 0x0044d051 bsr rbp, rcx | __asm ("bsr rbp, rcx"); 0x0044d055 xor ebp, 0x3f | ebp ^= 0x3f; 0x0044d058 cmp rdx, 1 | 0x0044d05c adc ebp, 0 | ebp += 0; 0x0044d05f mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0044d064 mov rdi, rax | 0x0044d067 mov esi, 0x80 | 0x0044d06c mov rdx, r13 | 0x0044d06f call 0x403820 | memset (rax, 0x80, r13); 0x0044d074 mov r8, r14 | r8 = r14; 0x0044d077 jmp 0x44d0a4 | goto label_7; | label_4: 0x0044d079 mov rbp, r8 | 0x0044d07c call 0x457f90 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x0044d081 mov r8, rbp | r8 = rbp; 0x0044d084 mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x0044d089 test rbx, rbx | 0x0044d08c jne 0x44cfe3 | | } while (rbx != 0); | label_5: 0x0044d092 xor ebp, ebp | ebp = 0; 0x0044d094 xor r13d, r13d | r13d = 0; 0x0044d097 xor eax, eax | eax = 0; 0x0044d099 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0044d09e xor eax, eax | eax = 0; 0x0044d0a0 mov qword [rsp], rax | *(rsp) = rax; | label_7: 0x0044d0a4 mov rax, qword [r8 + 0x18] | rax = *((r8 + 0x18)); 0x0044d0a8 test rax, rax | 0x0044d0ab mov qword [rsp + 0x18], r13 | *((rsp + 0x18)) = r13; 0x0044d0b0 mov qword [rsp + 0x48], rbp | *((rsp + 0x48)) = rbp; | if (rax == 0) { 0x0044d0b5 je 0x44d2be | goto label_8; | } 0x0044d0bb mov ecx, ebp | ecx = ebp; 0x0044d0bd mov qword [rsp + 0x58], rcx | *((rsp + 0x58)) = rcx; 0x0044d0c2 lea r14, [r13 - 1] | r14 = r13 - 1; 0x0044d0c6 xor edx, edx | edx = 0; 0x0044d0c8 lea rdi, [rsp + 0x68] | rdi = rsp + 0x68; 0x0044d0cd xor ebp, ebp | ebp = 0; 0x0044d0cf mov qword [rsp + 0x30], r8 | *((rsp + 0x30)) = r8; 0x0044d0d4 jmp 0x44d0f6 | goto label_9; | label_0: 0x0044d0e0 mov rax, qword [r8 + 0x18] | rax = *((r8 + 0x18)); 0x0044d0e4 mov rdx, qword [rsp + 0x50] | rdx = *((rsp + 0x50)); | do { 0x0044d0e9 add rdx, 0x10 | rdx += 0x10; 0x0044d0ed cmp rdx, rax | | if (rdx >= rax) { 0x0044d0f0 jae 0x44d2c0 | goto label_10; | } | label_9: 0x0044d0f6 mov r9, qword [r8 + 8] | r9 = *((r8 + 8)); 0x0044d0fa movdqu xmm0, xmmword [r9 + rdx] | __asm ("movdqu xmm0, xmmword [r9 + rdx]"); 0x0044d100 pmovmskb ecx, xmm0 | __asm ("pmovmskb ecx, xmm0"); 0x0044d104 cmp cx, 0xffff | 0x0044d108 je 0x44d0e9 | | } while (cx == 0xffff); 0x0044d10a add r9, rdx | r9 += rdx; 0x0044d10d mov qword [rsp + 0x50], rdx | *((rsp + 0x50)) = rdx; 0x0044d112 lea r10, [rdx + rdx*2] | r10 = rdx * 3; 0x0044d116 shl r10, 4 | r10 <<= 4; 0x0044d11a add r10, qword [r8] | r10 += *(r8); 0x0044d11d not ecx | ecx = ~ecx; 0x0044d11f movzx r15d, cx | r15d = (int32_t) cx; 0x0044d123 mov qword [rsp + 0x38], r9 | *((rsp + 0x38)) = r9; 0x0044d128 jmp 0x44d197 | goto label_11; | label_1: 0x0044d130 xor edx, edx | edx = 0; 0x0044d132 mov r8, qword [rsp + 0x30] | r8 = *((rsp + 0x30)); 0x0044d137 mov rdi, rsi | rdi = rsi; 0x0044d13a mov r9, qword [rsp + 0x38] | r9 = *((rsp + 0x38)); 0x0044d13f mov r10, r13 | r10 = r13; 0x0044d142 mov rcx, qword [rsp + 0x40] | rcx = *((rsp + 0x40)); 0x0044d147 mov r13, qword [rsp + 0x18] | r13 = *((rsp + 0x18)); | label_2: 0x0044d14c lea rbx, [rdx + rdx*2] | rbx = rdx * 3; 0x0044d150 shl rbx, 4 | rbx <<= 4; 0x0044d154 movdqu xmm0, xmmword [r12] | __asm ("movdqu xmm0, xmmword [r12]"); 0x0044d15a movups xmm1, xmmword [r12 + 0x10] | __asm ("movups xmm1, xmmword [r12 + 0x10]"); 0x0044d160 movups xmm2, xmmword [r12 + 0x20] | __asm ("movups xmm2, xmmword [r12 + 0x20]"); 0x0044d166 mov rsi, qword [rsp] | rsi = *(rsp); 0x0044d16a movups xmmword [rsi + rbx + 0x20], xmm2 | __asm ("movups xmmword [rsi + rbx + 0x20], xmm2"); 0x0044d16f movups xmmword [rsi + rbx + 0x10], xmm1 | __asm ("movups xmmword [rsi + rbx + 0x10], xmm1"); 0x0044d174 movdqu xmmword [rsi + rbx], xmm0 | __asm ("movdqu xmmword [rsi + rbx], xmm0"); 0x0044d179 and al, 0x7f | al &= 0x7f; 0x0044d17b mov byte [rbp + rdx], al | *((rbp + rdx)) = al; 0x0044d17f mov rbp, qword [rsp + 0x20] | rbp = *((rsp + 0x20)); 0x0044d184 inc rbp | rbp++; 0x0044d187 mov eax, 0xfffffffe | eax = 0xfffffffe; 0x0044d18c rol eax, cl | eax = rotate_left32 (eax, cl); 0x0044d18e and r15d, eax | r15d &= eax; | if (r15d == 0) { 0x0044d191 je 0x44d0e0 | goto label_0; | } | label_11: 0x0044d197 mov qword [rsp + 0x20], rbp | *((rsp + 0x20)) = rbp; 0x0044d19c bsf ecx, r15d | __asm ("bsf ecx, r15d"); 0x0044d1a0 lea rax, [rcx + rcx*2] | rax = rcx * 3; 0x0044d1a4 shl rax, 4 | rax <<= 4; 0x0044d1a8 lea r12, [r10 + rax] | r12 = r10 + rax; 0x0044d1ac mov qword [rsp + 0x40], rcx | *((rsp + 0x40)) = rcx; 0x0044d1b1 mov byte [r9 + rcx], 0xc0 | *((r9 + rcx)) = 0xc0; 0x0044d1b6 dec qword [r8 + 0x10] | *((r8 + 0x10))--; 0x0044d1ba mov qword [rsp + 0x188], 0 | *((rsp + 0x188)) = 0; 0x0044d1c6 mov byte [rsp + 0x190], 0 | *((rsp + 0x190)) = 0; 0x0044d1ce movdqa xmm0, xmmword [rip + 0x321ea] | __asm ("movdqa xmm0, xmmword [0x0047f3c0]"); 0x0044d1d6 movdqu xmmword [rsp + 0x128], xmm0 | __asm ("movdqu xmmword [rsp + 0x128], xmm0"); 0x0044d1df cmp qword [r10 + rax + 0x20], 0x17 | 0x0044d1e5 mov rsi, r12 | rsi = r12; | if (*((r10 + rax + 0x20)) != 0x17) { 0x0044d1e8 je 0x44d1ee | 0x0044d1ea mov rsi, qword [r10 + rax] | | } 0x0044d1ee mov r13, r10 | r13 = r10; 0x0044d1f1 mov rdx, qword [r10 + rax + 0x18] | 0x0044d1f6 mov rbp, rdi | 0x0044d1f9 call 0x456ef0 | BloombergLP::bslh::SpookyHashAlgorithmImp::update(voidconst*,unsigned long) (rdi, *((r10 + rax)), *((r10 + rax + 0x18))); 0x0044d1fe mov rax, qword [r12 + 0x18] | rax = *((r12 + 0x18)); 0x0044d203 mov qword [rsp + 0x28], rax | *((rsp + 0x28)) = rax; 0x0044d208 mov edx, 8 | 0x0044d20d mov rdi, rbp | 0x0044d210 lea rsi, [rsp + 0x28] | 0x0044d215 call 0x456ef0 | BloombergLP::bslh::SpookyHashAlgorithmImp::update(voidconst*,unsigned long) (rbp, rsp + 0x28, 8); 0x0044d21a mov rdi, rbp | 0x0044d21d lea rsi, [rsp + 0x28] | 0x0044d222 lea rdx, [rsp + 0x60] | 0x0044d227 call 0x456470 | BloombergLP::bslh::SpookyHashAlgorithmImp::finalize(unsigned long long*,unsigned long long*) (rbp, rsp + 0x28, rsp + 0x60); 0x0044d22c mov rsi, rbp | rsi = rbp; 0x0044d22f mov rax, qword [rsp + 0x28] | rax = *((rsp + 0x28)); 0x0044d234 movabs rcx, 0x9e3779b97f4a7c15 | rcx = 0x9e3779b97f4a7c15; 0x0044d23e imul rax, rcx | rax *= rcx; 0x0044d242 cmp qword [rsp + 0x18], 0 | 0x0044d248 mov rbp, qword [rsp + 0x10] | rbp = *((rsp + 0x10)); | if (*((rsp + 0x18)) == 0) { 0x0044d24d je 0x44d130 | goto label_1; | } 0x0044d253 mov rdx, rax | rdx = rax; 0x0044d256 mov rcx, qword [rsp + 0x58] | rcx = *((rsp + 0x58)); 0x0044d25b shr rdx, cl | rdx >>= cl; 0x0044d25e shl rdx, 4 | rdx <<= 4; 0x0044d262 xor ebx, ebx | ebx = 0; 0x0044d264 mov r8, qword [rsp + 0x30] | r8 = *((rsp + 0x30)); 0x0044d269 mov rdi, rsi | rdi = rsi; 0x0044d26c mov r9, qword [rsp + 0x38] | r9 = *((rsp + 0x38)); 0x0044d271 mov r10, r13 | r10 = r13; 0x0044d274 mov rcx, qword [rsp + 0x40] | rcx = *((rsp + 0x40)); 0x0044d279 mov r13, qword [rsp + 0x18] | r13 = *((rsp + 0x18)); 0x0044d27e nop | | do { 0x0044d280 movdqu xmm0, xmmword [rbp + rdx] | __asm ("movdqu xmm0, xmmword [rbp + rdx]"); 0x0044d286 pmovmskb esi, xmm0 | __asm ("pmovmskb esi, xmm0"); 0x0044d28a test si, si | | if (si != 0) { 0x0044d28d jne 0x44d2b0 | goto label_12; | } 0x0044d28f add rdx, 0x10 | rdx += 0x10; 0x0044d293 and rdx, r14 | rdx &= r14; 0x0044d296 add rbx, 0x10 | rbx += 0x10; 0x0044d29a cmp rbx, r13 | 0x0044d29d jb 0x44d280 | | } while (rbx < r13); 0x0044d29f mov rdx, r13 | rdx = r13; 0x0044d2a2 jmp 0x44d14c | goto label_2; | label_12: 0x0044d2b0 movzx esi, si | esi = (int32_t) si; 0x0044d2b3 bsf esi, esi | __asm ("bsf esi, esi"); 0x0044d2b6 add rdx, rsi | rdx += rsi; 0x0044d2b9 jmp 0x44d14c | goto label_2; | label_8: 0x0044d2be xor ebp, ebp | ebp = 0; | label_10: 0x0044d2c0 mov rsi, qword [r8] | rsi = *(r8); 0x0044d2c3 mov rdi, qword [r8 + 0x28] | rdi = *((r8 + 0x28)); 0x0044d2c7 mov rax, qword [rdi] | rax = *(rdi); 0x0044d2ca mov r14, r8 | r14 = r8; 0x0044d2cd call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0044d2d0 mov rsi, qword [r14 + 8] | rsi = *((r14 + 8)); 0x0044d2d4 mov rdi, qword [r14 + 0x28] | rdi = *((r14 + 0x28)); 0x0044d2d8 mov rax, qword [rdi] | rax = *(rdi); 0x0044d2db call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0044d2de mov rax, qword [rsp] | rax = *(rsp); 0x0044d2e2 mov qword [r14], rax | *(r14) = rax; 0x0044d2e5 mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x0044d2ea mov qword [r14 + 8], rax | *((r14 + 8)) = rax; 0x0044d2ee mov qword [r14 + 0x10], rbp | *((r14 + 0x10)) = rbp; 0x0044d2f2 mov qword [r14 + 0x18], r13 | *((r14 + 0x18)) = r13; 0x0044d2f6 mov rax, qword [rsp + 0x48] | rax = *((rsp + 0x48)); 0x0044d2fb mov dword [r14 + 0x20], eax | *((r14 + 0x20)) = eax; 0x0044d2ff add rsp, 0x198 | 0x0044d306 pop rbx | 0x0044d307 pop r12 | 0x0044d309 pop r13 | 0x0044d30b pop r14 | 0x0044d30d pop r15 | 0x0044d30f pop rbp | 0x0044d310 ret | return rax; | label_6: 0x0044d311 xor r13d, r13d | r13d = 0; 0x0044d314 jmp 0x44d014 | goto label_3; | }