; assembly | /* r2dec pseudo code output */ | /* bdlc_flathashmap.t/none @ 0x454f50 */ | #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::pair_bsl::basic_string_char__std::__1::char_traits_char___bsl::allocator_char_____double___BloombergLP::bdlc::FlatHashMap_EntryUtil_bsl::basic_string_char__std::__1::char_traits_char___bsl::allocator_char_____double__bsl::pair_bsl::basic_string_char__std::__1::char_traits_char___bsl::allocator_char_____double_____SeedIsHash_bsl::basic_string_char__std::__1::char_traits_char___bsl::allocator_char_______EqualAndState_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::pair_bsl::basic_string_char_std::_1::char_traits_char_bsl::allocator_char_double_BloombergLP::bdlc::FlatHashMap_EntryUtil_bsl::basic_string_char_std::_1::char_traits_char_bsl::allocator_char_double_bsl::pair_bsl::basic_string_char_std::_1::char_traits_char_bsl::allocator_char_double_SeedIsHash_bsl::basic_string_char_std::_1::char_traits_char_bsl::allocator_char_EqualAndState_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; | int64_t var_10h; | int64_t var_18h; | int64_t var_20h; | int64_t var_28h; | int64_t var_30h; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlc::FlatHashTable, bsl::allocator >, bsl::pair, bsl::allocator >, double>, BloombergLP::bdlc::FlatHashMap_EntryUtil, bsl::allocator >, double, bsl::pair, bsl::allocator >, double> >, SeedIsHash, bsl::allocator > >, EqualAndState, bsl::allocator > > >::rehashRaw(unsigned long) */ 0x00454f50 push rbp | 0x00454f51 push r15 | 0x00454f53 push r14 | 0x00454f55 push r12 | 0x00454f57 push rbx | 0x00454f58 sub rsp, 0x70 | 0x00454f5c mov r14, rdi | r14 = rdi; 0x00454f5f lea rdx, [rdi + 0x28] | rdx = rdi + 0x28; 0x00454f63 lea rcx, [rdi + 0x30] | rcx = rdi + 0x30; 0x00454f67 mov r8, qword [rdi + 0x60] | r8 = *((rdi + 0x60)); 0x00454f6b lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00454f70 call 0x4546b0 | BloombergLP::bdlc::FlatHashTable,bsl::allocator>,bsl::pair,bsl::allocator>,double>,BloombergLP::bdlc::FlatHashMap_EntryUtil,bsl::allocator>,double,bsl::pair,bsl::allocator>,double>>,SeedIsHash,bsl::allocator>>,EqualAndState,bsl::allocator>>>::FlatHashTable(unsigned long,SeedIsHash,bsl::allocator>>const&,EqualAndState,bsl::allocator>>const&,BloombergLP::bslma::Allocator*) (); 0x00454f75 mov rax, qword [r14 + 0x18] | rax = *((r14 + 0x18)); 0x00454f79 test rax, rax | | if (rax == 0) { 0x00454f7c je 0x4550a1 | goto label_3; | } 0x00454f82 xor r8d, r8d | r8d = 0; 0x00454f85 jmp 0x454fa1 | goto label_4; | label_0: 0x00454f90 mov rax, qword [r14 + 0x18] | rax = *((r14 + 0x18)); | do { 0x00454f94 add r8, 0x10 | r8 += 0x10; 0x00454f98 cmp r8, rax | | if (r8 >= rax) { 0x00454f9b jae 0x4550a1 | goto label_3; | } | label_4: 0x00454fa1 mov r9, qword [r14 + 8] | r9 = *((r14 + 8)); 0x00454fa5 movdqu xmm0, xmmword [r9 + r8] | __asm ("movdqu xmm0, xmmword [r9 + r8]"); 0x00454fab pmovmskb ecx, xmm0 | __asm ("pmovmskb ecx, xmm0"); 0x00454faf cmp cx, 0xffff | 0x00454fb3 je 0x454f94 | | } while (cx == 0xffff); 0x00454fb5 add r9, r8 | r9 += r8; 0x00454fb8 imul r10, r8, 0x38 | r10 = r8 * 0x38; 0x00454fbc add r10, qword [r14] | r10 += *(r14); 0x00454fbf not ecx | ecx = ~ecx; 0x00454fc1 movzx r12d, cx | r12d = (int32_t) cx; 0x00454fc5 jmp 0x455024 | goto label_5; | label_1: 0x00454fd0 xor edi, edi | edi = 0; | label_2: 0x00454fd2 mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x00454fd7 imul rcx, rdi, 0x38 | rcx = rdi * 0x38; 0x00454fdb mov rdx, qword [rsi + 0x30] | rdx = *((rsi + 0x30)); 0x00454fdf mov qword [rax + rcx + 0x30], rdx | *((rax + rcx + 0x30)) = rdx; 0x00454fe4 movdqu xmm0, xmmword [rsi] | __asm ("movdqu xmm0, xmmword [rsi]"); 0x00454fe8 movups xmm1, xmmword [rsi + 0x10] | __asm ("movups xmm1, xmmword [rsi + 0x10]"); 0x00454fec movups xmm2, xmmword [rsi + 0x20] | __asm ("movups xmm2, xmmword [rsi + 0x20]"); 0x00454ff0 movups xmmword [rax + rcx + 0x20], xmm2 | __asm ("movups xmmword [rax + rcx + 0x20], xmm2"); 0x00454ff5 movups xmmword [rax + rcx + 0x10], xmm1 | __asm ("movups xmmword [rax + rcx + 0x10], xmm1"); 0x00454ffa movdqu xmmword [rax + rcx], xmm0 | __asm ("movdqu xmmword [rax + rcx], xmm0"); 0x00454fff and r15b, 0x7f | r15b &= 0x7f; 0x00455003 mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x00455008 mov byte [rax + rdi], r15b | *((rax + rdi)) = r15b; 0x0045500c inc qword [rsp + 0x18] | *((rsp + 0x18))++; 0x00455011 mov eax, 0xfffffffe | eax = 0xfffffffe; 0x00455016 mov ecx, r11d | ecx = r11d; 0x00455019 rol eax, cl | eax = rotate_left32 (eax, cl); 0x0045501b and r12d, eax | r12d &= eax; | if (r12d == 0) { 0x0045501e je 0x454f90 | goto label_0; | } | label_5: 0x00455024 bsf r11d, r12d | __asm ("bsf r11d, r12d"); 0x00455028 imul rsi, r11, 0x38 | rsi = r11 * 0x38; 0x0045502c mov byte [r9 + r11], 0xc0 | *((r9 + r11)) = 0xc0; 0x00455031 dec qword [r14 + 0x10] | *((r14 + 0x10))--; 0x00455035 add rsi, r10 | rsi += r10; 0x00455038 mov r15, qword [rsp + 0x30] | r15 = *((rsp + 0x30)); 0x0045503d mov rdi, qword [rsp + 0x20] | rdi = *((rsp + 0x20)); 0x00455042 test rdi, rdi | | if (rdi == 0) { 0x00455045 je 0x454fd0 | goto label_1; | } 0x00455047 mov cl, byte [rsp + 0x28] | cl = *((rsp + 0x28)); 0x0045504b mov rbx, r15 | rbx = r15; 0x0045504e shr rbx, cl | rbx >>= cl; 0x00455051 mov rcx, qword [rsp + 0x10] | rcx = *((rsp + 0x10)); 0x00455056 shl rbx, 4 | rbx <<= 4; 0x0045505a lea rax, [rdi - 1] | rax = rdi - 1; 0x0045505e xor edx, edx | edx = 0; | do { 0x00455060 movdqu xmm0, xmmword [rcx + rbx] | __asm ("movdqu xmm0, xmmword [rcx + rbx]"); 0x00455065 pmovmskb ebp, xmm0 | __asm ("pmovmskb ebp, xmm0"); 0x00455069 test bp, bp | | if (bp != 0) { 0x0045506c jne 0x455090 | goto label_6; | } 0x0045506e add rbx, 0x10 | rbx += 0x10; 0x00455072 and rbx, rax | rbx &= rax; 0x00455075 add rdx, 0x10 | rdx += 0x10; 0x00455079 cmp rdx, rdi | 0x0045507c jb 0x455060 | | } while (rdx < rdi); 0x0045507e jmp 0x454fd2 | goto label_2; | label_6: 0x00455090 movzx eax, bp | eax = (int32_t) bp; 0x00455093 bsf eax, eax | __asm ("bsf eax, eax"); 0x00455096 add rbx, rax | rbx += rax; 0x00455099 mov rdi, rbx | rdi = rbx; 0x0045509c jmp 0x454fd2 | goto label_2; | label_3: 0x004550a1 mov rsi, qword [r14] | rsi = *(r14); 0x004550a4 mov rdi, qword [r14 + 0x60] | rdi = *((r14 + 0x60)); 0x004550a8 mov rax, qword [rdi] | rax = *(rdi); 0x004550ab call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x004550ae mov rsi, qword [r14 + 8] | rsi = *((r14 + 8)); 0x004550b2 mov rdi, qword [r14 + 0x60] | rdi = *((r14 + 0x60)); 0x004550b6 mov rax, qword [rdi] | rax = *(rdi); 0x004550b9 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x004550bc mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x004550c1 mov qword [r14], rax | *(r14) = rax; 0x004550c4 mov qword [rsp + 8], 0 | *((rsp + 8)) = 0; 0x004550cd mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x004550d2 mov qword [r14 + 8], rax | *((r14 + 8)) = rax; 0x004550d6 mov qword [rsp + 0x10], 0 | *((rsp + 0x10)) = 0; 0x004550df mov rax, qword [r14 + 0x10] | rax = *((r14 + 0x10)); 0x004550e3 movups xmm0, xmmword [rsp + 0x18] | __asm ("movups xmm0, xmmword [rsp + 0x18]"); 0x004550e8 mov qword [rsp + 0x18], rax | *((rsp + 0x18)) = rax; 0x004550ed movups xmmword [r14 + 0x10], xmm0 | __asm ("movups xmmword [r14 + 0x10], xmm0"); 0x004550f2 mov qword [rsp + 0x20], 0 | *((rsp + 0x20)) = 0; 0x004550fb mov eax, dword [r14 + 0x20] | eax = *((r14 + 0x20)); 0x004550ff mov ecx, dword [rsp + 0x28] | ecx = *((rsp + 0x28)); 0x00455103 mov dword [r14 + 0x20], ecx | *((r14 + 0x20)) = ecx; 0x00455107 mov dword [rsp + 0x28], eax | *((rsp + 0x28)) = eax; 0x0045510b lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00455110 call 0x454890 | BloombergLP::bdlc::FlatHashTable,bsl::allocator>,bsl::pair,bsl::allocator>,double>,BloombergLP::bdlc::FlatHashMap_EntryUtil,bsl::allocator>,double,bsl::pair,bsl::allocator>,double>>,SeedIsHash,bsl::allocator>>,EqualAndState,bsl::allocator>>>::~FlatHashTable() (); 0x00455115 add rsp, 0x70 | 0x00455119 pop rbx | 0x0045511a pop r12 | 0x0045511c pop r14 | 0x0045511e pop r15 | 0x00455120 pop rbp | 0x00455121 ret | return rax; | }