; assembly | /* r2dec pseudo code output */ | /* bdlc_flathashmap.t/assume @ 0x454dd0 */ | #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) */ 0x00454dd0 push rbp | 0x00454dd1 push r15 | 0x00454dd3 push r14 | 0x00454dd5 push r12 | 0x00454dd7 push rbx | 0x00454dd8 sub rsp, 0x70 | 0x00454ddc mov r14, rdi | r14 = rdi; 0x00454ddf lea rdx, [rdi + 0x28] | rdx = rdi + 0x28; 0x00454de3 lea rcx, [rdi + 0x30] | rcx = rdi + 0x30; 0x00454de7 mov r8, qword [rdi + 0x60] | r8 = *((rdi + 0x60)); 0x00454deb lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00454df0 call 0x454550 | 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*) (); 0x00454df5 mov rax, qword [r14 + 0x18] | rax = *((r14 + 0x18)); 0x00454df9 test rax, rax | | if (rax == 0) { 0x00454dfc je 0x454f17 | goto label_4; | } 0x00454e02 xor r8d, r8d | r8d = 0; 0x00454e05 jmp 0x454e21 | goto label_5; | label_0: 0x00454e10 mov rax, qword [r14 + 0x18] | rax = *((r14 + 0x18)); | do { 0x00454e14 add r8, 0x10 | r8 += 0x10; 0x00454e18 cmp r8, rax | | if (r8 >= rax) { 0x00454e1b jae 0x454f17 | goto label_4; | } | label_5: 0x00454e21 mov r9, qword [r14 + 8] | r9 = *((r14 + 8)); 0x00454e25 movdqu xmm0, xmmword [r9 + r8] | __asm ("movdqu xmm0, xmmword [r9 + r8]"); 0x00454e2b pmovmskb ecx, xmm0 | __asm ("pmovmskb ecx, xmm0"); 0x00454e2f cmp cx, 0xffff | 0x00454e33 je 0x454e14 | | } while (cx == 0xffff); 0x00454e35 add r9, r8 | r9 += r8; 0x00454e38 imul r10, r8, 0x38 | r10 = r8 * 0x38; 0x00454e3c add r10, qword [r14] | r10 += *(r14); 0x00454e3f not ecx | ecx = ~ecx; 0x00454e41 movzx r12d, cx | r12d = (int32_t) cx; 0x00454e45 jmp 0x454eab | goto label_6; | label_2: 0x00454e50 movzx eax, bp | eax = (int32_t) bp; 0x00454e53 bsf eax, eax | __asm ("bsf eax, eax"); 0x00454e56 add rbx, rax | rbx += rax; | label_1: 0x00454e59 mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x00454e5e imul rcx, rbx, 0x38 | rcx = rbx * 0x38; 0x00454e62 mov rdx, qword [rsi + 0x30] | rdx = *((rsi + 0x30)); 0x00454e66 mov qword [rax + rcx + 0x30], rdx | *((rax + rcx + 0x30)) = rdx; 0x00454e6b movdqu xmm0, xmmword [rsi] | __asm ("movdqu xmm0, xmmword [rsi]"); 0x00454e6f movups xmm1, xmmword [rsi + 0x10] | __asm ("movups xmm1, xmmword [rsi + 0x10]"); 0x00454e73 movups xmm2, xmmword [rsi + 0x20] | __asm ("movups xmm2, xmmword [rsi + 0x20]"); 0x00454e77 movups xmmword [rax + rcx + 0x20], xmm2 | __asm ("movups xmmword [rax + rcx + 0x20], xmm2"); 0x00454e7c movups xmmword [rax + rcx + 0x10], xmm1 | __asm ("movups xmmword [rax + rcx + 0x10], xmm1"); 0x00454e81 movdqu xmmword [rax + rcx], xmm0 | __asm ("movdqu xmmword [rax + rcx], xmm0"); 0x00454e86 and r15b, 0x7f | r15b &= 0x7f; 0x00454e8a mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x00454e8f mov byte [rax + rbx], r15b | *((rax + rbx)) = r15b; 0x00454e93 inc qword [rsp + 0x18] | *((rsp + 0x18))++; 0x00454e98 mov eax, 0xfffffffe | eax = 0xfffffffe; 0x00454e9d mov ecx, r11d | ecx = r11d; 0x00454ea0 rol eax, cl | eax = rotate_left32 (eax, cl); 0x00454ea2 and r12d, eax | r12d &= eax; | if (r12d == 0) { 0x00454ea5 je 0x454e10 | goto label_0; | } | label_6: 0x00454eab bsf r11d, r12d | __asm ("bsf r11d, r12d"); 0x00454eaf imul rsi, r11, 0x38 | rsi = r11 * 0x38; 0x00454eb3 mov byte [r9 + r11], 0xc0 | *((r9 + r11)) = 0xc0; 0x00454eb8 dec qword [r14 + 0x10] | *((r14 + 0x10))--; 0x00454ebc add rsi, r10 | rsi += r10; 0x00454ebf mov r15, qword [rsp + 0x30] | r15 = *((rsp + 0x30)); 0x00454ec4 mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x00454ec9 test rax, rax | | if (rax == 0) { 0x00454ecc je 0x454e59 | goto label_1; | } 0x00454ece mov cl, byte [rsp + 0x28] | cl = *((rsp + 0x28)); 0x00454ed2 mov rbx, r15 | rbx = r15; 0x00454ed5 shr rbx, cl | rbx >>= cl; 0x00454ed8 mov rcx, qword [rsp + 0x10] | rcx = *((rsp + 0x10)); 0x00454edd shl rbx, 4 | rbx <<= 4; 0x00454ee1 lea rdi, [rax - 1] | rdi = rax - 1; 0x00454ee5 xor edx, edx | edx = 0; 0x00454ee7 nop word [rax + rax] | | label_3: 0x00454ef0 movdqu xmm0, xmmword [rcx + rbx] | __asm ("movdqu xmm0, xmmword [rcx + rbx]"); 0x00454ef5 pmovmskb ebp, xmm0 | __asm ("pmovmskb ebp, xmm0"); 0x00454ef9 test bp, bp | | if (bp != 0) { 0x00454efc jne 0x454e50 | goto label_2; | } 0x00454f02 add rbx, 0x10 | rbx += 0x10; 0x00454f06 and rbx, rdi | rbx &= rdi; 0x00454f09 add rdx, 0x10 | rdx += 0x10; 0x00454f0d cmp rdx, rax | | if (rdx < rax) { 0x00454f10 jb 0x454ef0 | goto label_3; | } 0x00454f12 jmp 0x454e59 | goto label_1; | label_4: 0x00454f17 mov rsi, qword [r14] | rsi = *(r14); 0x00454f1a mov rdi, qword [r14 + 0x60] | rdi = *((r14 + 0x60)); 0x00454f1e mov rax, qword [rdi] | rax = *(rdi); 0x00454f21 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00454f24 mov rsi, qword [r14 + 8] | rsi = *((r14 + 8)); 0x00454f28 mov rdi, qword [r14 + 0x60] | rdi = *((r14 + 0x60)); 0x00454f2c mov rax, qword [rdi] | rax = *(rdi); 0x00454f2f call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00454f32 mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x00454f37 mov qword [r14], rax | *(r14) = rax; 0x00454f3a mov qword [rsp + 8], 0 | *((rsp + 8)) = 0; 0x00454f43 mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x00454f48 mov qword [r14 + 8], rax | *((r14 + 8)) = rax; 0x00454f4c mov qword [rsp + 0x10], 0 | *((rsp + 0x10)) = 0; 0x00454f55 mov rax, qword [r14 + 0x10] | rax = *((r14 + 0x10)); 0x00454f59 movups xmm0, xmmword [rsp + 0x18] | __asm ("movups xmm0, xmmword [rsp + 0x18]"); 0x00454f5e mov qword [rsp + 0x18], rax | *((rsp + 0x18)) = rax; 0x00454f63 movups xmmword [r14 + 0x10], xmm0 | __asm ("movups xmmword [r14 + 0x10], xmm0"); 0x00454f68 mov qword [rsp + 0x20], 0 | *((rsp + 0x20)) = 0; 0x00454f71 mov eax, dword [r14 + 0x20] | eax = *((r14 + 0x20)); 0x00454f75 mov ecx, dword [rsp + 0x28] | ecx = *((rsp + 0x28)); 0x00454f79 mov dword [r14 + 0x20], ecx | *((r14 + 0x20)) = ecx; 0x00454f7d mov dword [rsp + 0x28], eax | *((rsp + 0x28)) = eax; 0x00454f81 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00454f86 call 0x454730 | 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() (); 0x00454f8b add rsp, 0x70 | 0x00454f8f pop rbx | 0x00454f90 pop r12 | 0x00454f92 pop r14 | 0x00454f94 pop r15 | 0x00454f96 pop rbp | 0x00454f97 ret | return rax; | }