; assembly | /* r2dec pseudo code output */ | /* bdlc_flathashset.t/assume @ 0x44e3e0 */ | #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_______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::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_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::basic_string, bsl::allocator >, BloombergLP::bdlc::FlatHashSet_EntryUtil, bsl::allocator > >, SeedIsHash, bsl::allocator > >, EqualAndState, bsl::allocator > > >::rehashRaw(unsigned long) */ 0x0044e3e0 push rbp | 0x0044e3e1 push r15 | 0x0044e3e3 push r14 | 0x0044e3e5 push r12 | 0x0044e3e7 push rbx | 0x0044e3e8 sub rsp, 0x70 | 0x0044e3ec mov r14, rdi | r14 = rdi; 0x0044e3ef lea rdx, [rdi + 0x28] | rdx = rdi + 0x28; 0x0044e3f3 lea rcx, [rdi + 0x30] | rcx = rdi + 0x30; 0x0044e3f7 mov r8, qword [rdi + 0x60] | r8 = *((rdi + 0x60)); 0x0044e3fb lea rdi, [rsp + 8] | rdi = rsp + 8; 0x0044e400 call 0x44dd60 | BloombergLP::bdlc::FlatHashTable,bsl::allocator>,bsl::basic_string,bsl::allocator>,BloombergLP::bdlc::FlatHashSet_EntryUtil,bsl::allocator>>,SeedIsHash,bsl::allocator>>,EqualAndState,bsl::allocator>>>::FlatHashTable(unsigned long,SeedIsHash,bsl::allocator>>const&,EqualAndState,bsl::allocator>>const&,BloombergLP::bslma::Allocator*) (); 0x0044e405 mov rax, qword [r14 + 0x18] | rax = *((r14 + 0x18)); 0x0044e409 test rax, rax | | if (rax == 0) { 0x0044e40c je 0x44e527 | goto label_4; | } 0x0044e412 xor r8d, r8d | r8d = 0; 0x0044e415 jmp 0x44e431 | goto label_5; | label_0: 0x0044e420 mov rax, qword [r14 + 0x18] | rax = *((r14 + 0x18)); | do { 0x0044e424 add r8, 0x10 | r8 += 0x10; 0x0044e428 cmp r8, rax | | if (r8 >= rax) { 0x0044e42b jae 0x44e527 | goto label_4; | } | label_5: 0x0044e431 mov r9, qword [r14 + 8] | r9 = *((r14 + 8)); 0x0044e435 movdqu xmm0, xmmword [r9 + r8] | __asm ("movdqu xmm0, xmmword [r9 + r8]"); 0x0044e43b pmovmskb ecx, xmm0 | __asm ("pmovmskb ecx, xmm0"); 0x0044e43f cmp cx, 0xffff | 0x0044e443 je 0x44e424 | | } while (cx == 0xffff); 0x0044e445 add r9, r8 | r9 += r8; 0x0044e448 lea r10, [r8 + r8*2] | r10 = r8 * 3; 0x0044e44c shl r10, 4 | r10 <<= 4; 0x0044e450 add r10, qword [r14] | r10 += *(r14); 0x0044e453 not ecx | ecx = ~ecx; 0x0044e455 movzx r12d, cx | r12d = (int32_t) cx; 0x0044e459 jmp 0x44e4b6 | goto label_6; | label_2: 0x0044e460 movzx eax, bp | eax = (int32_t) bp; 0x0044e463 bsf eax, eax | __asm ("bsf eax, eax"); 0x0044e466 add rbx, rax | rbx += rax; | label_1: 0x0044e469 mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x0044e46e lea rcx, [rbx + rbx*2] | rcx = rbx * 3; 0x0044e472 shl rcx, 4 | rcx <<= 4; 0x0044e476 movdqu xmm0, xmmword [rsi] | __asm ("movdqu xmm0, xmmword [rsi]"); 0x0044e47a movups xmm1, xmmword [rsi + 0x10] | __asm ("movups xmm1, xmmword [rsi + 0x10]"); 0x0044e47e movups xmm2, xmmword [rsi + 0x20] | __asm ("movups xmm2, xmmword [rsi + 0x20]"); 0x0044e482 movups xmmword [rax + rcx + 0x20], xmm2 | __asm ("movups xmmword [rax + rcx + 0x20], xmm2"); 0x0044e487 movups xmmword [rax + rcx + 0x10], xmm1 | __asm ("movups xmmword [rax + rcx + 0x10], xmm1"); 0x0044e48c movdqu xmmword [rax + rcx], xmm0 | __asm ("movdqu xmmword [rax + rcx], xmm0"); 0x0044e491 and r15b, 0x7f | r15b &= 0x7f; 0x0044e495 mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x0044e49a mov byte [rax + rbx], r15b | *((rax + rbx)) = r15b; 0x0044e49e inc qword [rsp + 0x18] | *((rsp + 0x18))++; 0x0044e4a3 mov eax, 0xfffffffe | eax = 0xfffffffe; 0x0044e4a8 mov ecx, r11d | ecx = r11d; 0x0044e4ab rol eax, cl | eax = rotate_left32 (eax, cl); 0x0044e4ad and r12d, eax | r12d &= eax; | if (r12d == 0) { 0x0044e4b0 je 0x44e420 | goto label_0; | } | label_6: 0x0044e4b6 bsf r11d, r12d | __asm ("bsf r11d, r12d"); 0x0044e4ba lea rsi, [r11 + r11*2] | rsi = r11 * 3; 0x0044e4be shl rsi, 4 | rsi <<= 4; 0x0044e4c2 mov byte [r9 + r11], 0xc0 | *((r9 + r11)) = 0xc0; 0x0044e4c7 dec qword [r14 + 0x10] | *((r14 + 0x10))--; 0x0044e4cb add rsi, r10 | rsi += r10; 0x0044e4ce mov r15, qword [rsp + 0x30] | r15 = *((rsp + 0x30)); 0x0044e4d3 mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x0044e4d8 test rax, rax | | if (rax == 0) { 0x0044e4db je 0x44e469 | goto label_1; | } 0x0044e4dd mov cl, byte [rsp + 0x28] | cl = *((rsp + 0x28)); 0x0044e4e1 mov rbx, r15 | rbx = r15; 0x0044e4e4 shr rbx, cl | rbx >>= cl; 0x0044e4e7 mov rcx, qword [rsp + 0x10] | rcx = *((rsp + 0x10)); 0x0044e4ec shl rbx, 4 | rbx <<= 4; 0x0044e4f0 lea rdi, [rax - 1] | rdi = rax - 1; 0x0044e4f4 xor edx, edx | edx = 0; 0x0044e4f6 nop word cs:[rax + rax] | | label_3: 0x0044e500 movdqu xmm0, xmmword [rcx + rbx] | __asm ("movdqu xmm0, xmmword [rcx + rbx]"); 0x0044e505 pmovmskb ebp, xmm0 | __asm ("pmovmskb ebp, xmm0"); 0x0044e509 test bp, bp | | if (bp != 0) { 0x0044e50c jne 0x44e460 | goto label_2; | } 0x0044e512 add rbx, 0x10 | rbx += 0x10; 0x0044e516 and rbx, rdi | rbx &= rdi; 0x0044e519 add rdx, 0x10 | rdx += 0x10; 0x0044e51d cmp rdx, rax | | if (rdx < rax) { 0x0044e520 jb 0x44e500 | goto label_3; | } 0x0044e522 jmp 0x44e469 | goto label_1; | label_4: 0x0044e527 mov rsi, qword [r14] | rsi = *(r14); 0x0044e52a mov rdi, qword [r14 + 0x60] | rdi = *((r14 + 0x60)); 0x0044e52e mov rax, qword [rdi] | rax = *(rdi); 0x0044e531 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0044e534 mov rsi, qword [r14 + 8] | rsi = *((r14 + 8)); 0x0044e538 mov rdi, qword [r14 + 0x60] | rdi = *((r14 + 0x60)); 0x0044e53c mov rax, qword [rdi] | rax = *(rdi); 0x0044e53f call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0044e542 mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x0044e547 mov qword [r14], rax | *(r14) = rax; 0x0044e54a mov qword [rsp + 8], 0 | *((rsp + 8)) = 0; 0x0044e553 mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x0044e558 mov qword [r14 + 8], rax | *((r14 + 8)) = rax; 0x0044e55c mov qword [rsp + 0x10], 0 | *((rsp + 0x10)) = 0; 0x0044e565 mov rax, qword [r14 + 0x10] | rax = *((r14 + 0x10)); 0x0044e569 movups xmm0, xmmword [rsp + 0x18] | __asm ("movups xmm0, xmmword [rsp + 0x18]"); 0x0044e56e mov qword [rsp + 0x18], rax | *((rsp + 0x18)) = rax; 0x0044e573 movups xmmword [r14 + 0x10], xmm0 | __asm ("movups xmmword [r14 + 0x10], xmm0"); 0x0044e578 mov qword [rsp + 0x20], 0 | *((rsp + 0x20)) = 0; 0x0044e581 mov eax, dword [r14 + 0x20] | eax = *((r14 + 0x20)); 0x0044e585 mov ecx, dword [rsp + 0x28] | ecx = *((rsp + 0x28)); 0x0044e589 mov dword [r14 + 0x20], ecx | *((r14 + 0x20)) = ecx; 0x0044e58d mov dword [rsp + 0x28], eax | *((rsp + 0x28)) = eax; 0x0044e591 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x0044e596 call 0x44df40 | BloombergLP::bdlc::FlatHashTable,bsl::allocator>,bsl::basic_string,bsl::allocator>,BloombergLP::bdlc::FlatHashSet_EntryUtil,bsl::allocator>>,SeedIsHash,bsl::allocator>>,EqualAndState,bsl::allocator>>>::~FlatHashTable() (); 0x0044e59b add rsp, 0x70 | 0x0044e59f pop rbx | 0x0044e5a0 pop r12 | 0x0044e5a2 pop r14 | 0x0044e5a4 pop r15 | 0x0044e5a6 pop rbp | 0x0044e5a7 ret | return rax; | }