; assembly | /* r2dec pseudo code output */ | /* bdlc_flathashmap.t/none @ 0x45cd00 */ | #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) method.BloombergLP::bdlc::FlatHashTable_short__bsl::pair_short__short___BloombergLP::bdlc::FlatHashMap_EntryUtil_short__short__bsl::pair_short__short_____BloombergLP::bslh::FibonacciBadHashWrapper_bsl::hash_short_____bsl::equal_to_short___.indexOfKey_boo () | int64_t method_BloombergLP::bdlc::FlatHashTable_short_bsl::pair_short_short_BloombergLP::bdlc::FlatHashMap_EntryUtil_short_short_bsl::pair_short_short_BloombergLP::bslh::FibonacciBadHashWrapper_bsl::hash_short_bsl::equal_to_short_indexOfKey_boo (int64_t arg4, int64_t arg3, int64_t arg2, uint32_t arg1, uint32_t arg9, int64_t arg10) { | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | xmm2 = arg9; | xmm3 = arg10; | /* BloombergLP::bdlc::FlatHashTable, BloombergLP::bdlc::FlatHashMap_EntryUtil >, BloombergLP::bslh::FibonacciBadHashWrapper >, bsl::equal_to >::indexOfKey(bool*, short const&, unsigned long) */ 0x0045cd00 push rbp | 0x0045cd01 push r15 | 0x0045cd03 push r14 | 0x0045cd05 push r12 | 0x0045cd07 push rbx | 0x0045cd08 mov rbx, rcx | rbx = rcx; 0x0045cd0b mov r14, rdi | r14 = rdi; 0x0045cd0e mov rdi, qword [rdi + 0x18] | rdi = *((rdi + 0x18)); 0x0045cd12 test rdi, rdi | | if (rdi == 0) { 0x0045cd15 je 0x45ce40 | goto label_2; | } 0x0045cd1b mov r10d, ebx | r10d = ebx; 0x0045cd1e mov cl, byte [r14 + 0x20] | cl = *((r14 + 0x20)); 0x0045cd22 mov rax, rbx | rax = rbx; 0x0045cd25 shr rax, cl | rax >>= cl; 0x0045cd28 and r10b, 0x7f | r10b &= 0x7f; 0x0045cd2c shl rax, 4 | rax <<= 4; 0x0045cd30 mov r8, qword [r14] | r8 = *(r14); 0x0045cd33 mov r9, qword [r14 + 8] | r9 = *((r14 + 8)); 0x0045cd37 movzx ecx, r10b | ecx = (int32_t) r10b; 0x0045cd3b movd xmm0, ecx | xmm0 = ecx; 0x0045cd3f pxor xmm1, xmm1 | xmm1 = 0; 0x0045cd43 pshufb xmm0, xmm1 | __asm ("pshufb xmm0, xmm1"); 0x0045cd48 movzx r15d, word [rdx] | r15d = *(rdx); 0x0045cd4c lea r10, [rdi - 1] | r10 = rdi - 1; 0x0045cd50 xor r11d, r11d | r11d = 0; 0x0045cd53 movdqa xmm1, xmmword [rip + 0x2b115] | __asm ("movdqa xmm1, xmmword [0x00487e70]"); | label_0: 0x0045cd5b movdqu xmm2, xmmword [r9 + rax] | __asm ("movdqu xmm2, xmmword [r9 + rax]"); 0x0045cd61 movdqa xmm3, xmm0 | __asm ("movdqa xmm3, xmm0"); 0x0045cd65 pcmpeqb xmm3, xmm2 | __asm ("pcmpeqb xmm3, xmm2"); 0x0045cd69 pmovmskb ecx, xmm3 | __asm ("pmovmskb ecx, xmm3"); 0x0045cd6d test cx, cx | | if (cx == 0) { 0x0045cd70 je 0x45cda0 | goto label_3; | } 0x0045cd72 lea rdx, [r8 + rax*4] | rdx = r8 + rax*4; 0x0045cd76 movzx ebp, cx | ebp = (int32_t) cx; | do { 0x0045cd79 bsf ecx, ebp | __asm ("bsf ecx, ebp"); 0x0045cd7c cmp word [rdx + rcx*4], r15w | | if (*((rdx + rcx*4)) == r15w) { 0x0045cd81 je 0x45cdbf | goto label_4; | } 0x0045cd83 mov r12d, 0xfffffffe | r12d = 0xfffffffe; 0x0045cd89 rol r12d, cl | r12d = rotate_left32 (r12d, cl); 0x0045cd8c and ebp, r12d | ebp &= r12d; 0x0045cd8f jne 0x45cd79 | | } while (ebp != 0); 0x0045cd91 nop word cs:[rax + rax] | 0x0045cd9b nop dword [rax + rax] | | label_3: 0x0045cda0 pcmpeqb xmm2, xmm1 | __asm ("pcmpeqb xmm2, xmm1"); 0x0045cda4 pmovmskb ecx, xmm2 | __asm ("pmovmskb ecx, xmm2"); 0x0045cda8 test cx, cx | | if (cx != 0) { 0x0045cdab jne 0x45cdc9 | goto label_1; | } 0x0045cdad add rax, 0x10 | rax += 0x10; 0x0045cdb1 and rax, r10 | rax &= r10; 0x0045cdb4 add r11, 0x10 | r11 += 0x10; 0x0045cdb8 cmp r11, rdi | | if (r11 < rdi) { 0x0045cdbb jb 0x45cd5b | goto label_0; | } 0x0045cdbd jmp 0x45cdc9 | goto label_1; | label_4: 0x0045cdbf mov ecx, ecx | 0x0045cdc1 add rax, rcx | rax += rcx; 0x0045cdc4 cmp rax, rdi | | if (rax != rdi) { 0x0045cdc7 jne 0x45ce47 | goto label_5; | } | label_1: 0x0045cdc9 mov byte [rsi], 1 | *(rsi) = 1; 0x0045cdcc mov rax, qword [r14 + 0x18] | rax = *((r14 + 0x18)); 0x0045cdd0 mov rcx, rax | rcx = *((r14 + 0x18)); 0x0045cdd3 shr rcx, 3 | rcx >>= 3; 0x0045cdd7 lea rdx, [rcx*8] | rdx = rcx*8; 0x0045cddf sub rdx, rcx | rdx -= rcx; 0x0045cde2 cmp qword [r14 + 0x10], rdx | | if (*((r14 + 0x10)) >= rdx) { 0x0045cde6 jb 0x45ce04 | 0x0045cde8 lea rcx, [rax + rax] | rcx = rax + rax; 0x0045cdec test rax, rax | 0x0045cdef mov esi, 0x20 | esi = 0x20; | if (rax != 0) { 0x0045cdf4 cmovne rsi, rcx | rsi = rcx; | } 0x0045cdf8 mov rdi, r14 | 0x0045cdfb call 0x45ce70 | BloombergLP::bdlc::FlatHashTable,BloombergLP::bdlc::FlatHashMap_EntryUtil>,BloombergLP::bslh::FibonacciBadHashWrapper>,bsl::equal_to>::rehashRaw(unsigned long) (r14, rsi, rdx); 0x0045ce00 mov rax, qword [r14 + 0x18] | rax = *((r14 + 0x18)); | } 0x0045ce04 test rax, rax | | if (rax == 0) { 0x0045ce07 je 0x45ce4c | goto label_6; | } 0x0045ce09 mov cl, byte [r14 + 0x20] | cl = *((r14 + 0x20)); 0x0045ce0d shr rbx, cl | rbx >>= cl; 0x0045ce10 mov rcx, qword [r14 + 8] | rcx = *((r14 + 8)); 0x0045ce14 shl rbx, 4 | rbx <<= 4; 0x0045ce18 lea rdx, [rax - 1] | rdx = rax - 1; 0x0045ce1c xor esi, esi | esi = 0; 0x0045ce1e nop | | do { 0x0045ce20 movdqu xmm0, xmmword [rcx + rbx] | __asm ("movdqu xmm0, xmmword [rcx + rbx]"); 0x0045ce25 pmovmskb edi, xmm0 | __asm ("pmovmskb edi, xmm0"); 0x0045ce29 test di, di | | if (di != 0) { 0x0045ce2c jne 0x45ce50 | goto label_7; | } 0x0045ce2e add rbx, 0x10 | rbx += 0x10; 0x0045ce32 and rbx, rdx | rbx &= rdx; 0x0045ce35 add rsi, 0x10 | rsi += 0x10; 0x0045ce39 cmp rsi, rax | 0x0045ce3c jb 0x45ce20 | | } while (rsi < rax); 0x0045ce3e jmp 0x45ce5c | goto label_8; | label_2: 0x0045ce40 xor eax, eax | eax = 0; 0x0045ce42 cmp rax, rdi | | if (rax == rdi) { 0x0045ce45 je 0x45cdc9 | goto label_1; | } | label_5: 0x0045ce47 mov byte [rsi], 0 | *(rsi) = 0; 0x0045ce4a jmp 0x45ce5c | goto label_8; | label_6: 0x0045ce4c xor eax, eax | eax = 0; 0x0045ce4e jmp 0x45ce5c | goto label_8; | label_7: 0x0045ce50 movzx eax, di | eax = (int32_t) di; 0x0045ce53 bsf eax, eax | __asm ("bsf eax, eax"); 0x0045ce56 add rbx, rax | rbx += rax; 0x0045ce59 mov rax, rbx | rax = rbx; | label_8: 0x0045ce5c pop rbx | 0x0045ce5d pop r12 | 0x0045ce5f pop r14 | 0x0045ce61 pop r15 | 0x0045ce63 pop rbp | 0x0045ce64 ret | return rax; | }