; assembly | /* r2dec pseudo code output */ | /* bdlc_flathashset.t/assume @ 0x44f1c0 */ | #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) */ 0x0044f1c0 push rbp | 0x0044f1c1 push r15 | 0x0044f1c3 push r14 | 0x0044f1c5 push r13 | 0x0044f1c7 push r12 | 0x0044f1c9 push rbx | 0x0044f1ca sub rsp, 0x28 | 0x0044f1ce mov r14, rsi | r14 = rsi; 0x0044f1d1 mov rbp, rdi | 0x0044f1d4 mov r13, qword [rdi + 0x28] | r13 = *((rdi + 0x28)); 0x0044f1d8 mov rbx, qword [rdi + 0x38] | rbx = *((rdi + 0x38)); 0x0044f1dc test rbx, rbx | | if (rbx == 0) { 0x0044f1df jne 0x44f1f5 | 0x0044f1e1 mov rbx, qword [rip + 0x2538a0] | rbx = BloombergLP::bslma::Default::s_defaultAllocator; 0x0044f1e8 test rbx, rbx | | if (rbx != 0) { 0x0044f1eb jne 0x44f1f5 | goto label_5; | } 0x0044f1ed call 0x457e60 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x0044f1f2 mov rbx, rax | rbx = rax; | } | label_5: 0x0044f1f5 test r14, r14 | 0x0044f1f8 mov qword [rsp + 8], rbx | *((rsp + 8)) = rbx; | if (r14 != 0) { 0x0044f1fd je 0x44f290 | 0x0044f203 mov r12d, 0x20 | r12d = 0x20; 0x0044f209 cmp r14, 0x21 | | if (r14 >= 0x21) { 0x0044f20d jb 0x44f234 | 0x0044f20f dec r14 | r14--; 0x0044f212 or r14, 1 | r14 |= 1; 0x0044f216 bsr rax, r14 | __asm ("bsr rax, r14"); 0x0044f21a xor rax, 0x3f | rax ^= 0x3f; 0x0044f21e mov ecx, eax | ecx = eax; 0x0044f220 neg cl | cl = -cl; 0x0044f222 mov r12d, 1 | r12d = 1; 0x0044f228 shl r12, cl | r12 <<= cl; 0x0044f22b test rax, rax | | if (rax == 0) { 0x0044f22e je 0x44f41f | goto label_6; | } | } | label_4: 0x0044f234 mov rax, r12 | rax = r12; 0x0044f237 shl rax, 4 | rax <<= 4; 0x0044f23b lea rsi, [rax + rax*2] | rsi = rax * 3; 0x0044f23f mov rax, qword [rbx] | rax = *(rbx); 0x0044f242 mov rdi, rbx | rdi = rbx; 0x0044f245 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x0044f248 mov r15, rax | r15 = rax; 0x0044f24b mov rax, qword [rbx] | rax = *(rbx); 0x0044f24e mov rdi, rbx | rdi = rbx; 0x0044f251 mov rsi, r12 | rsi = r12; 0x0044f254 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x0044f257 mov rbx, rax | rbx = rax; 0x0044f25a mov rax, r12 | rax = r12; 0x0044f25d shr rax, 4 | rax >>= 4; 0x0044f261 dec rax | rax--; 0x0044f264 mov rcx, rax | rcx = rax; 0x0044f267 or rcx, 1 | rcx |= 1; 0x0044f26b bsr rcx, rcx | __asm ("bsr rcx, rcx"); 0x0044f26f xor ecx, 0x3f | ecx ^= 0x3f; 0x0044f272 cmp rax, 1 | 0x0044f276 adc ecx, 0 | ecx += 0; 0x0044f279 mov qword [rsp + 0x10], rcx | *((rsp + 0x10)) = rcx; 0x0044f27e mov rdi, rbx | 0x0044f281 mov esi, 0x80 | 0x0044f286 mov rdx, r12 | 0x0044f289 call 0x403820 | eax = memset (rbx, 0x80, r12); 0x0044f28e jmp 0x44f29f | | } else { 0x0044f290 xor eax, eax | eax = 0; 0x0044f292 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0044f297 xor r12d, r12d | r12d = 0; 0x0044f29a xor ebx, ebx | ebx = 0; 0x0044f29c xor r15d, r15d | r15d = 0; | } 0x0044f29f mov rax, qword [rbp + 0x18] | rax = *((rbp + 0x18)); 0x0044f2a3 test rax, rax | | if (rax == 0) { 0x0044f2a6 je 0x44f3d9 | goto label_7; | } 0x0044f2ac mov rdx, r13 | rdx = r13; 0x0044f2af mov rcx, qword [rsp + 0x10] | rcx = *((rsp + 0x10)); 0x0044f2b4 shr rdx, cl | rdx >>= cl; 0x0044f2b7 shl rdx, 4 | rdx <<= 4; 0x0044f2bb mov qword [rsp + 0x18], rdx | *((rsp + 0x18)) = rdx; 0x0044f2c0 lea rdx, [r12 - 1] | rdx = r12 - 1; 0x0044f2c5 and r13b, 0x7f | r13b &= 0x7f; 0x0044f2c9 mov qword [rsp + 0x20], r13 | *((rsp + 0x20)) = r13; 0x0044f2ce xor esi, esi | esi = 0; 0x0044f2d0 xor r13d, r13d | r13d = 0; 0x0044f2d3 jmp 0x44f2f5 | goto label_8; | label_0: 0x0044f2e0 mov rax, qword [rbp + 0x18] | rax = *((rbp + 0x18)); 0x0044f2e4 mov rsi, qword [rsp] | rsi = *(rsp); | do { 0x0044f2e8 add rsi, 0x10 | rsi += 0x10; 0x0044f2ec cmp rsi, rax | | if (rsi >= rax) { 0x0044f2ef jae 0x44f3dc | goto label_9; | } | label_8: 0x0044f2f5 mov r10, qword [rbp + 8] | r10 = *((rbp + 8)); 0x0044f2f9 movdqu xmm0, xmmword [r10 + rsi] | __asm ("movdqu xmm0, xmmword [r10 + rsi]"); 0x0044f2ff pmovmskb ecx, xmm0 | __asm ("pmovmskb ecx, xmm0"); 0x0044f303 cmp cx, 0xffff | 0x0044f307 je 0x44f2e8 | | } while (cx == 0xffff); 0x0044f309 add r10, rsi | r10 += rsi; 0x0044f30c mov qword [rsp], rsi | *(rsp) = rsi; 0x0044f310 lea r11, [rsi + rsi*2] | r11 = rsi * 3; 0x0044f314 shl r11, 4 | r11 <<= 4; 0x0044f318 add r11, qword [rbp] | r11 += *(rbp); 0x0044f31c not ecx | ecx = ~ecx; 0x0044f31e movzx eax, cx | eax = (int32_t) cx; 0x0044f321 jmp 0x44f37e | goto label_10; | label_2: 0x0044f330 movzx ebp, r14w | ebp = (int32_t) r14w; 0x0044f334 bsf ebp, ebp | __asm ("bsf ebp, ebp"); 0x0044f337 add rsi, rbp | rsi += rbp; | label_1: 0x0044f33a lea rbp, [rsi + rsi*2] | rbp = rsi * 3; 0x0044f33e shl rbp, 4 | rbp <<= 4; 0x0044f342 movdqu xmm0, xmmword [rdi] | __asm ("movdqu xmm0, xmmword [rdi]"); 0x0044f346 movups xmm1, xmmword [rdi + 0x10] | __asm ("movups xmm1, xmmword [rdi + 0x10]"); 0x0044f34a movups xmm2, xmmword [rdi + 0x20] | __asm ("movups xmm2, xmmword [rdi + 0x20]"); 0x0044f34e movups xmmword [r15 + rbp + 0x20], xmm2 | __asm ("movups xmmword [r15 + rbp + 0x20], xmm2"); 0x0044f354 movups xmmword [r15 + rbp + 0x10], xmm1 | __asm ("movups xmmword [r15 + rbp + 0x10], xmm1"); 0x0044f35a movdqu xmmword [r15 + rbp], xmm0 | __asm ("movdqu xmmword [r15 + rbp], xmm0"); 0x0044f360 mov rdi, qword [rsp + 0x20] | rdi = *((rsp + 0x20)); 0x0044f365 mov byte [rbx + rsi], dil | *((rbx + rsi)) = dil; 0x0044f369 inc r13 | r13++; 0x0044f36c mov esi, 0xfffffffe | esi = 0xfffffffe; 0x0044f371 rol esi, cl | esi = rotate_left32 (esi, cl); 0x0044f373 and eax, esi | eax &= esi; 0x0044f375 mov rbp, r9 | | if (eax == 0) { 0x0044f378 je 0x44f2e0 | goto label_0; | } | label_10: 0x0044f37e bsf ecx, eax | __asm ("bsf ecx, eax"); 0x0044f381 lea rdi, [rcx + rcx*2] | rdi = rcx * 3; 0x0044f385 shl rdi, 4 | rdi <<= 4; 0x0044f389 add rdi, r11 | rdi += r11; 0x0044f38c mov byte [r10 + rcx], 0xc0 | *((r10 + rcx)) = 0xc0; 0x0044f391 mov r9, rbp | r9 = rbp; 0x0044f394 dec qword [rbp + 0x10] | *((rbp + 0x10))--; 0x0044f398 test r12, r12 | | if (r12 == 0) { 0x0044f39b je 0x44f33a | goto label_1; | } 0x0044f39d mov rsi, qword [rsp + 0x18] | rsi = *((rsp + 0x18)); 0x0044f3a2 xor r8d, r8d | r8d = 0; 0x0044f3a5 nop word cs:[rax + rax] | 0x0044f3af nop | | label_3: 0x0044f3b0 movdqu xmm0, xmmword [rbx + rsi] | __asm ("movdqu xmm0, xmmword [rbx + rsi]"); 0x0044f3b5 pmovmskb r14d, xmm0 | __asm ("pmovmskb r14d, xmm0"); 0x0044f3ba test r14w, r14w | | if (r14w != 0) { 0x0044f3be jne 0x44f330 | goto label_2; | } 0x0044f3c4 add rsi, 0x10 | rsi += 0x10; 0x0044f3c8 and rsi, rdx | rsi &= rdx; 0x0044f3cb add r8, 0x10 | r8 += 0x10; 0x0044f3cf cmp r8, r12 | | if (r8 < r12) { 0x0044f3d2 jb 0x44f3b0 | goto label_3; | } 0x0044f3d4 jmp 0x44f33a | goto label_1; | label_7: 0x0044f3d9 xor r13d, r13d | r13d = 0; | label_9: 0x0044f3dc mov rsi, qword [rbp] | rsi = *(rbp); 0x0044f3e0 mov rdi, qword [rbp + 0x38] | rdi = *((rbp + 0x38)); 0x0044f3e4 mov rax, qword [rdi] | rax = *(rdi); 0x0044f3e7 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0044f3ea mov rsi, qword [rbp + 8] | rsi = *((rbp + 8)); 0x0044f3ee mov rdi, qword [rbp + 0x38] | rdi = *((rbp + 0x38)); 0x0044f3f2 mov rax, qword [rdi] | rax = *(rdi); 0x0044f3f5 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0044f3f8 mov qword [rbp], r15 | *(rbp) = r15; 0x0044f3fc mov qword [rbp + 8], rbx | *((rbp + 8)) = rbx; 0x0044f400 mov qword [rbp + 0x10], r13 | *((rbp + 0x10)) = r13; 0x0044f404 mov qword [rbp + 0x18], r12 | *((rbp + 0x18)) = r12; 0x0044f408 mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x0044f40d mov dword [rbp + 0x20], eax | *((rbp + 0x20)) = eax; 0x0044f410 add rsp, 0x28 | 0x0044f414 pop rbx | 0x0044f415 pop r12 | 0x0044f417 pop r13 | 0x0044f419 pop r14 | 0x0044f41b pop r15 | 0x0044f41d pop rbp | 0x0044f41e ret | return rax; | label_6: 0x0044f41f xor r12d, r12d | r12d = 0; 0x0044f422 jmp 0x44f234 | goto label_4; | }