; assembly | /* r2dec pseudo code output */ | /* bdlc_flathashset.t/none @ 0x44f310 */ | #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_______bsl::equal_to_bsl::basic_string_char__std::__1::char_traits_char___bsl::allocator_char_______::rehashRaw_unsigned_long_ () | uint64_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_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 * var_10h; | int64_t var_18h; | int64_t var_20h; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlc::FlatHashTable, bsl::allocator >, bsl::basic_string, bsl::allocator >, BloombergLP::bdlc::FlatHashSet_EntryUtil, bsl::allocator > >, SeedIsHash, bsl::allocator > >, bsl::equal_to, bsl::allocator > > >::rehashRaw(unsigned long) */ 0x0044f310 push rbp | 0x0044f311 push r15 | 0x0044f313 push r14 | 0x0044f315 push r13 | 0x0044f317 push r12 | 0x0044f319 push rbx | 0x0044f31a sub rsp, 0x28 | 0x0044f31e mov rbx, rsi | rbx = rsi; 0x0044f321 mov r14, rdi | r14 = rdi; 0x0044f324 mov r13, qword [rdi + 0x28] | r13 = *((rdi + 0x28)); 0x0044f328 mov rbp, qword [rdi + 0x38] | rbp = *((rdi + 0x38)); 0x0044f32c test rbp, rbp | | if (rbp == 0) { 0x0044f32f jne 0x44f345 | 0x0044f331 mov rbp, qword [rip + 0x253750] | rbp = BloombergLP::bslma::Default::s_defaultAllocator; 0x0044f338 test rbp, rbp | | if (rbp != 0) { 0x0044f33b jne 0x44f345 | goto label_4; | } 0x0044f33d call 0x457f90 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x0044f342 mov rbp, rax | | } | label_4: 0x0044f345 test rbx, rbx | 0x0044f348 mov qword [rsp + 8], rbp | *((rsp + 8)) = rbp; | if (rbx != 0) { 0x0044f34d je 0x44f3e2 | 0x0044f353 mov r12d, 0x20 | r12d = 0x20; 0x0044f359 cmp rbx, 0x21 | | if (rbx >= 0x21) { 0x0044f35d jb 0x44f384 | 0x0044f35f dec rbx | rbx--; 0x0044f362 or rbx, 1 | rbx |= 1; 0x0044f366 bsr rax, rbx | __asm ("bsr rax, rbx"); 0x0044f36a xor rax, 0x3f | rax ^= 0x3f; 0x0044f36e mov ecx, eax | ecx = eax; 0x0044f370 neg cl | cl = -cl; 0x0044f372 mov r12d, 1 | r12d = 1; 0x0044f378 shl r12, cl | r12 <<= cl; 0x0044f37b test rax, rax | | if (rax == 0) { 0x0044f37e je 0x44f577 | goto label_5; | } | } | label_3: 0x0044f384 mov rax, r12 | rax = r12; 0x0044f387 shl rax, 4 | rax <<= 4; 0x0044f38b lea rsi, [rax + rax*2] | rsi = rax * 3; 0x0044f38f mov rax, qword [rbp] | rax = *(rbp); 0x0044f393 mov rdi, rbp | rdi = rbp; 0x0044f396 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x0044f399 mov r15, rax | r15 = rax; 0x0044f39c mov rax, qword [rbp] | rax = *(rbp); 0x0044f3a0 mov rdi, rbp | rdi = rbp; 0x0044f3a3 mov rsi, r12 | rsi = r12; 0x0044f3a6 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x0044f3a9 mov rbx, rax | rbx = rax; 0x0044f3ac mov rax, r12 | rax = r12; 0x0044f3af shr rax, 4 | rax >>= 4; 0x0044f3b3 dec rax | rax--; 0x0044f3b6 mov rcx, rax | rcx = rax; 0x0044f3b9 or rcx, 1 | rcx |= 1; 0x0044f3bd bsr rcx, rcx | __asm ("bsr rcx, rcx"); 0x0044f3c1 xor ecx, 0x3f | ecx ^= 0x3f; 0x0044f3c4 cmp rax, 1 | 0x0044f3c8 adc ecx, 0 | ecx += 0; 0x0044f3cb mov qword [rsp + 0x10], rcx | *((rsp + 0x10)) = rcx; 0x0044f3d0 mov rdi, rbx | 0x0044f3d3 mov esi, 0x80 | 0x0044f3d8 mov rdx, r12 | 0x0044f3db call 0x403820 | eax = memset (rbx, 0x80, r12); 0x0044f3e0 jmp 0x44f3f1 | | } else { 0x0044f3e2 xor eax, eax | eax = 0; 0x0044f3e4 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0044f3e9 xor r12d, r12d | r12d = 0; 0x0044f3ec xor ebx, ebx | ebx = 0; 0x0044f3ee xor r15d, r15d | r15d = 0; | } 0x0044f3f1 mov rax, qword [r14 + 0x18] | rax = *((r14 + 0x18)); 0x0044f3f5 test rax, rax | | if (rax == 0) { 0x0044f3f8 je 0x44f532 | goto label_6; | } 0x0044f3fe mov rdx, r13 | rdx = r13; 0x0044f401 mov rcx, qword [rsp + 0x10] | rcx = *((rsp + 0x10)); 0x0044f406 shr rdx, cl | rdx >>= cl; 0x0044f409 shl rdx, 4 | rdx <<= 4; 0x0044f40d mov qword [rsp + 0x18], rdx | *((rsp + 0x18)) = rdx; 0x0044f412 lea rdx, [r12 - 1] | rdx = r12 - 1; 0x0044f417 and r13b, 0x7f | r13b &= 0x7f; 0x0044f41b mov qword [rsp + 0x20], r13 | *((rsp + 0x20)) = r13; 0x0044f420 xor esi, esi | esi = 0; 0x0044f422 xor r13d, r13d | r13d = 0; 0x0044f425 jmp 0x44f445 | goto label_7; | label_0: 0x0044f430 mov rax, qword [r14 + 0x18] | rax = *((r14 + 0x18)); 0x0044f434 mov rsi, qword [rsp] | rsi = *(rsp); | do { 0x0044f438 add rsi, 0x10 | rsi += 0x10; 0x0044f43c cmp rsi, rax | | if (rsi >= rax) { 0x0044f43f jae 0x44f535 | goto label_8; | } | label_7: 0x0044f445 mov r10, qword [r14 + 8] | r10 = *((r14 + 8)); 0x0044f449 movdqu xmm0, xmmword [r10 + rsi] | __asm ("movdqu xmm0, xmmword [r10 + rsi]"); 0x0044f44f pmovmskb ecx, xmm0 | __asm ("pmovmskb ecx, xmm0"); 0x0044f453 cmp cx, 0xffff | 0x0044f457 je 0x44f438 | | } while (cx == 0xffff); 0x0044f459 add r10, rsi | r10 += rsi; 0x0044f45c mov qword [rsp], rsi | *(rsp) = rsi; 0x0044f460 lea r11, [rsi + rsi*2] | r11 = rsi * 3; 0x0044f464 shl r11, 4 | r11 <<= 4; 0x0044f468 add r11, qword [r14] | r11 += *(r14); 0x0044f46b not ecx | ecx = ~ecx; 0x0044f46d movzx eax, cx | eax = (int32_t) cx; 0x0044f470 jmp 0x44f4c3 | goto label_9; | label_1: 0x0044f480 xor esi, esi | esi = 0; | label_2: 0x0044f482 lea rbp, [rsi + rsi*2] | rbp = rsi * 3; 0x0044f486 shl rbp, 4 | rbp <<= 4; 0x0044f48a movdqu xmm0, xmmword [rdi] | __asm ("movdqu xmm0, xmmword [rdi]"); 0x0044f48e movups xmm1, xmmword [rdi + 0x10] | __asm ("movups xmm1, xmmword [rdi + 0x10]"); 0x0044f492 movups xmm2, xmmword [rdi + 0x20] | __asm ("movups xmm2, xmmword [rdi + 0x20]"); 0x0044f496 movups xmmword [r15 + rbp + 0x20], xmm2 | __asm ("movups xmmword [r15 + rbp + 0x20], xmm2"); 0x0044f49c movups xmmword [r15 + rbp + 0x10], xmm1 | __asm ("movups xmmword [r15 + rbp + 0x10], xmm1"); 0x0044f4a2 movdqu xmmword [r15 + rbp], xmm0 | __asm ("movdqu xmmword [r15 + rbp], xmm0"); 0x0044f4a8 mov rdi, qword [rsp + 0x20] | rdi = *((rsp + 0x20)); 0x0044f4ad mov byte [rbx + rsi], dil | *((rbx + rsi)) = dil; 0x0044f4b1 inc r13 | r13++; 0x0044f4b4 mov esi, 0xfffffffe | esi = 0xfffffffe; 0x0044f4b9 rol esi, cl | esi = rotate_left32 (esi, cl); 0x0044f4bb and eax, esi | eax &= esi; | if (eax == 0) { 0x0044f4bd je 0x44f430 | goto label_0; | } | label_9: 0x0044f4c3 bsf ecx, eax | __asm ("bsf ecx, eax"); 0x0044f4c6 lea rdi, [rcx + rcx*2] | rdi = rcx * 3; 0x0044f4ca shl rdi, 4 | rdi <<= 4; 0x0044f4ce add rdi, r11 | rdi += r11; 0x0044f4d1 mov byte [r10 + rcx], 0xc0 | *((r10 + rcx)) = 0xc0; 0x0044f4d6 dec qword [r14 + 0x10] | *((r14 + 0x10))--; 0x0044f4da test r12, r12 | | if (r12 == 0) { 0x0044f4dd je 0x44f480 | goto label_1; | } 0x0044f4df mov r9, r14 | r9 = r14; 0x0044f4e2 mov rsi, qword [rsp + 0x18] | rsi = *((rsp + 0x18)); 0x0044f4e7 xor r8d, r8d | r8d = 0; 0x0044f4ea nop word [rax + rax] | | do { 0x0044f4f0 movdqu xmm0, xmmword [rbx + rsi] | __asm ("movdqu xmm0, xmmword [rbx + rsi]"); 0x0044f4f5 pmovmskb r14d, xmm0 | __asm ("pmovmskb r14d, xmm0"); 0x0044f4fa test r14w, r14w | | if (r14w != 0) { 0x0044f4fe jne 0x44f520 | goto label_10; | } 0x0044f500 add rsi, 0x10 | rsi += 0x10; 0x0044f504 and rsi, rdx | rsi &= rdx; 0x0044f507 add r8, 0x10 | r8 += 0x10; 0x0044f50b cmp r8, r12 | 0x0044f50e jb 0x44f4f0 | | } while (r8 < r12); 0x0044f510 mov rsi, r12 | rsi = r12; 0x0044f513 jmp 0x44f52a | goto label_11; | label_10: 0x0044f520 movzx ebp, r14w | ebp = (int32_t) r14w; 0x0044f524 bsf ebp, ebp | __asm ("bsf ebp, ebp"); 0x0044f527 add rsi, rbp | rsi += rbp; | label_11: 0x0044f52a mov r14, r9 | r14 = r9; 0x0044f52d jmp 0x44f482 | goto label_2; | label_6: 0x0044f532 xor r13d, r13d | r13d = 0; | label_8: 0x0044f535 mov rsi, qword [r14] | rsi = *(r14); 0x0044f538 mov rdi, qword [r14 + 0x38] | rdi = *((r14 + 0x38)); 0x0044f53c mov rax, qword [rdi] | rax = *(rdi); 0x0044f53f call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0044f542 mov rsi, qword [r14 + 8] | rsi = *((r14 + 8)); 0x0044f546 mov rdi, qword [r14 + 0x38] | rdi = *((r14 + 0x38)); 0x0044f54a mov rax, qword [rdi] | rax = *(rdi); 0x0044f54d call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0044f550 mov qword [r14], r15 | *(r14) = r15; 0x0044f553 mov qword [r14 + 8], rbx | *((r14 + 8)) = rbx; 0x0044f557 mov qword [r14 + 0x10], r13 | *((r14 + 0x10)) = r13; 0x0044f55b mov qword [r14 + 0x18], r12 | *((r14 + 0x18)) = r12; 0x0044f55f mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x0044f564 mov dword [r14 + 0x20], eax | *((r14 + 0x20)) = eax; 0x0044f568 add rsp, 0x28 | 0x0044f56c pop rbx | 0x0044f56d pop r12 | 0x0044f56f pop r13 | 0x0044f571 pop r14 | 0x0044f573 pop r15 | 0x0044f575 pop rbp | 0x0044f576 ret | return rax; | label_5: 0x0044f577 xor r12d, r12d | r12d = 0; 0x0044f57a jmp 0x44f384 | goto label_3; | }