; assembly | /* r2dec pseudo code output */ | /* bdlc_flathashmap.t/assume @ 0x4527f0 */ | #include | ; (fcn) sym._ZN11BloombergLP4bdlc13FlatHashTableIN3bsl12basic_stringIcNSt3__111char_traitsIcEENS2_9allocatorIcEEEENS2_4pairIS9_iEENS0_21Fl () | int64_t ZN11BloombergLP4bdlc13FlatHashTableIN3bsl12basic_stringIcNSt3_111char_traitsIcEENS2_9allocatorIcEEEENS2_4pairIS9_iEENS0_21Fl (void * arg3, void * arg2, void * arg1) { | int64_t var_ch; | signed int64_t var_10h; | int64_t var_18h; | int64_t var_20h; | int64_t var_38h; | uint32_t var_40h; | int64_t var_48h; | int64_t var_50h; | int64_t var_58h; | int64_t var_60h; | int64_t var_68h; | int64_t var_70h; | int64_t var_78h; | int64_t var_90h; | uint32_t var_98h; | int64_t var_a0h; | int64_t var_a8h; | int64_t var_138h; | int64_t var_198h; | int64_t var_1a0h; | rdx = arg3; | rsi = arg2; | rdi = arg1; 0x004527f0 push rbp | 0x004527f1 push r15 | 0x004527f3 push r14 | 0x004527f5 push r13 | 0x004527f7 push r12 | 0x004527f9 push rbx | 0x004527fa sub rsp, 0x1a8 | 0x00452801 mov r12, rdx | r12 = rdx; 0x00452804 mov r13, rsi | r13 = rsi; 0x00452807 mov r15, rdi | r15 = rdi; 0x0045280a mov rbx, qword [rdx] | rbx = *(rdx); 0x0045280d mov rax, qword [rip + 0x259634] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x00452814 test rax, rax | | if (rax == 0) { 0x00452817 jne 0x45281e | 0x00452819 call 0x460860 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } 0x0045281e mov qword [rsp + 0x20], 0 | *((rsp + 0x20)) = 0; 0x00452827 mov qword [rsp + 0x40], 0x17 | *((rsp + 0x40)) = 0x17; 0x00452830 mov qword [rsp + 0x48], rax | *((rsp + 0x48)) = rax; 0x00452835 mov rdi, rbx | 0x00452838 call 0x403af0 | rax = strlen (rbx); 0x0045283d mov qword [rsp + 0x38], 0 | *((rsp + 0x38)) = 0; 0x00452846 lea rbp, [rsp + 0x20] | rbp = rsp + 0x20; 0x0045284b mov ecx, 0x48a49f | 0x00452850 mov rdi, rbp | 0x00452853 mov rsi, rbx | 0x00452856 mov rdx, rax | 0x00452859 call 0x464fa0 | bsl::basic_string,bsl::allocator>::privateAppend(char const*,unsigned long,char const*) (rbp, rbx, rax, "string<...>::assign(char*...): string too long"); 0x0045285e mov eax, dword [r12 + 8] | eax = *((r12 + 8)); 0x00452863 mov dword [rsp + 0x50], eax | *((rsp + 0x50)) = eax; 0x00452867 mov qword [rsp + 0x198], 0 | *((rsp + 0x198)) = 0; 0x00452873 mov byte [rsp + 0x1a0], 0 | *((rsp + 0x1a0)) = 0; 0x0045287b movdqa xmm0, xmmword [rip + 0x353bd] | __asm ("movdqa xmm0, xmmword [0x00487c40]"); 0x00452883 movdqu xmmword [rsp + 0x138], xmm0 | __asm ("movdqu xmmword [rsp + 0x138], xmm0"); 0x0045288c mov rdx, qword [rsp + 0x38] | rdx = *((rsp + 0x38)); 0x00452891 cmp qword [rsp + 0x40], 0x17 | | if (*((rsp + 0x40)) != 0x17) { 0x00452897 je 0x45289e | 0x00452899 mov rbp, qword [rsp + 0x20] | rbp = *((rsp + 0x20)); | } 0x0045289e lea rdi, [rsp + 0x78] | 0x004528a3 mov rsi, rbp | 0x004528a6 call 0x45f7a0 | BloombergLP::bslh::SpookyHashAlgorithmImp::update(voidconst*,unsigned long) (rsp + 0x78, rbp, rdx); 0x004528ab mov rax, qword [rsp + 0x38] | rax = *((rsp + 0x38)); 0x004528b0 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x004528b5 lea rdi, [rsp + 0x78] | 0x004528ba lea rsi, [rsp + 0x10] | 0x004528bf mov edx, 8 | 0x004528c4 call 0x45f7a0 | BloombergLP::bslh::SpookyHashAlgorithmImp::update(voidconst*,unsigned long) (rsp + 0x78, rsp + 0x10, 8); 0x004528c9 lea rdi, [rsp + 0x78] | 0x004528ce lea rsi, [rsp + 0x10] | 0x004528d3 lea rdx, [rsp + 0x70] | 0x004528d8 call 0x45ed20 | BloombergLP::bslh::SpookyHashAlgorithmImp::finalize(unsigned long long*,unsigned long long*) (rsp + 0x78, rsp + 0x10, rsp + 0x70); 0x004528dd movabs rbp, 0x9e3779b97f4a7c15 | 0x004528e7 imul rbp, qword [rsp + 0x10] | rbp *= *((rsp + 0x10)); 0x004528ed cmp qword [rsp + 0x40], 0x17 | | if (*((rsp + 0x40)) != 0x17) { 0x004528f3 je 0x452905 | 0x004528f5 mov rsi, qword [rsp + 0x20] | rsi = *((rsp + 0x20)); 0x004528fa mov rdi, qword [rsp + 0x48] | rdi = *((rsp + 0x48)); 0x004528ff mov rax, qword [rdi] | rax = *(rdi); 0x00452902 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x00452905 mov rbx, qword [r12] | rbx = *(r12); 0x00452909 mov rax, qword [rip + 0x259538] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x00452910 test rax, rax | | if (rax == 0) { 0x00452913 jne 0x45291a | 0x00452915 call 0x460860 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } 0x0045291a mov qword [rsp + 0x78], 0 | *((rsp + 0x78)) = 0; 0x00452923 movdqa xmm0, xmmword [rip + 0x35305] | __asm ("movdqa xmm0, xmmword [0x00487c30]"); 0x0045292b movdqu xmmword [rsp + 0x90], xmm0 | __asm ("movdqu xmmword [rsp + 0x90], xmm0"); 0x00452934 mov qword [rsp + 0xa0], rax | *((rsp + 0xa0)) = rax; 0x0045293c mov rdi, rbx | 0x0045293f call 0x403af0 | rax = strlen (rbx); 0x00452944 mov qword [rsp + 0x90], 0 | *((rsp + 0x90)) = 0; 0x00452950 lea r14, [rsp + 0x78] | r14 = rsp + 0x78; 0x00452955 mov ecx, 0x48a49f | 0x0045295a mov rdi, r14 | 0x0045295d mov rsi, rbx | 0x00452960 mov rdx, rax | 0x00452963 call 0x464fa0 | bsl::basic_string,bsl::allocator>::privateAppend(char const*,unsigned long,char const*) (r14, rbx, rax, "string<...>::assign(char*...): string too long"); 0x00452968 mov eax, dword [r12 + 8] | eax = *((r12 + 8)); 0x0045296d mov dword [rsp + 0xa8], eax | *((rsp + 0xa8)) = eax; 0x00452974 mov rdi, r13 | rdi = r13; 0x00452977 mov rsi, r14 | rsi = r14; 0x0045297a mov qword [rsp + 0x18], rbp | *((rsp + 0x18)) = rbp; 0x0045297f mov rdx, rbp | rdx = rbp; 0x00452982 call 0x44ea40 | rax = BloombergLP::bdlc::FlatHashTable,bsl::allocator>,bsl::pair,bsl::allocator>,int>,BloombergLP::bdlc::FlatHashMap_EntryUtil,bsl::allocator>,int,bsl::pair,bsl::allocator>,int>>,BloombergLP::bslh::FibonacciBadHashWrapper,bsl::allocator>>>,bsl::equal_to,bsl::allocator>>>::findKey(bsl::basic_string,bsl::allocator>const&,unsigned long)const (); 0x00452987 mov rbp, rax | 0x0045298a mov r14, qword [r13 + 0x18] | r14 = *((r13 + 0x18)); 0x0045298e cmp rax, r14 | | if (rax != r14) { 0x00452991 jne 0x452a10 | goto label_0; | } 0x00452993 mov rax, rbp | rax = rbp; 0x00452996 shr rax, 3 | rax >>= 3; 0x0045299a lea rcx, [rax*8] | rcx = rax*8; 0x004529a2 sub rcx, rax | rcx -= rax; 0x004529a5 mov rax, rbp | rax = rbp; 0x004529a8 cmp qword [r13 + 0x10], rcx | | if (*((r13 + 0x10)) >= rcx) { 0x004529ac jb 0x4529cb | 0x004529ae lea rax, [rbp + rbp] | rax = rbp + rbp; 0x004529b3 test rbp, rbp | 0x004529b6 mov esi, 0x20 | esi = 0x20; | if (rbp != 0) { 0x004529bb cmovne rsi, rax | rsi = rax; | } 0x004529bf mov rdi, r13 | 0x004529c2 call 0x44ebc0 | BloombergLP::bdlc::FlatHashTable,bsl::allocator>,bsl::pair,bsl::allocator>,int>,BloombergLP::bdlc::FlatHashMap_EntryUtil,bsl::allocator>,int,bsl::pair,bsl::allocator>,int>>,BloombergLP::bslh::FibonacciBadHashWrapper,bsl::allocator>>>,bsl::equal_to,bsl::allocator>>>::rehashRaw(unsigned long) (r13, rsi); 0x004529c7 mov rax, qword [r13 + 0x18] | rax = *((r13 + 0x18)); | } 0x004529cb test rax, rax | | if (rax == 0) { 0x004529ce je 0x452a28 | goto label_1; | } 0x004529d0 mov cl, byte [r13 + 0x20] | cl = *((r13 + 0x20)); 0x004529d4 mov rbx, qword [rsp + 0x18] | rbx = *((rsp + 0x18)); 0x004529d9 shr rbx, cl | rbx >>= cl; 0x004529dc mov rcx, qword [r13 + 8] | rcx = *((r13 + 8)); 0x004529e0 shl rbx, 4 | rbx <<= 4; 0x004529e4 lea rdx, [rax - 1] | rdx = rax - 1; 0x004529e8 xor esi, esi | esi = 0; 0x004529ea nop word [rax + rax] | | do { 0x004529f0 movdqu xmm0, xmmword [rcx + rbx] | __asm ("movdqu xmm0, xmmword [rcx + rbx]"); 0x004529f5 pmovmskb edi, xmm0 | __asm ("pmovmskb edi, xmm0"); 0x004529f9 test di, di | | if (di != 0) { 0x004529fc jne 0x452a2a | goto label_2; | } 0x004529fe add rbx, 0x10 | rbx += 0x10; 0x00452a02 and rbx, rdx | rbx &= rdx; 0x00452a05 add rsi, 0x10 | rsi += 0x10; 0x00452a09 cmp rsi, rax | 0x00452a0c jb 0x4529f0 | | } while (rsi < rax); 0x00452a0e jmp 0x452a33 | goto label_3; | label_0: 0x00452a10 mov dword [rsp + 0xc], 0 | *((rsp + 0xc)) = 0; 0x00452a18 mov rbx, rbp | rbx = rbp; 0x00452a1b cmp qword [rsp + 0x98], 0x17 | | if (*((rsp + 0x98)) == 0x17) { 0x00452a24 jne 0x452a44 | 0x00452a26 jmp 0x452a57 | goto label_4; | label_1: 0x00452a28 jmp 0x452a33 | goto label_3; | label_2: 0x00452a2a movzx eax, di | eax = (int32_t) di; 0x00452a2d bsf eax, eax | __asm ("bsf eax, eax"); 0x00452a30 add rbx, rax | rbx += rax; | label_3: 0x00452a33 mov al, 1 | al = 1; 0x00452a35 mov dword [rsp + 0xc], eax | *((rsp + 0xc)) = eax; 0x00452a39 cmp qword [rsp + 0x98], 0x17 | | if (*((rsp + 0x98)) == 0x17) { 0x00452a42 je 0x452a57 | goto label_4; | } | } 0x00452a44 mov rsi, qword [rsp + 0x78] | rsi = *((rsp + 0x78)); 0x00452a49 mov rdi, qword [rsp + 0xa0] | rdi = *((rsp + 0xa0)); 0x00452a51 mov rax, qword [rdi] | rax = *(rdi); 0x00452a54 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | label_4: 0x00452a57 cmp rbp, r14 | | if (rbp == r14) { 0x00452a5a jne 0x452b04 | 0x00452a60 mov qword [rsp + 0x68], r15 | *((rsp + 0x68)) = r15; 0x00452a65 mov r15, qword [r13] | r15 = *(r13); 0x00452a69 mov rax, qword [r13 + 0x28] | rax = *((r13 + 0x28)); 0x00452a6d mov rcx, r12 | rcx = r12; 0x00452a70 imul r12, rbx, 0x38 | r12 = rbx * 0x38; 0x00452a74 lea r14, [r15 + r12] | r14 = r15 + r12; 0x00452a78 mov qword [rsp + 0x60], rcx | *((rsp + 0x60)) = rcx; 0x00452a7d mov rbp, qword [rcx] | rbp = *(rcx); 0x00452a80 test rax, rax | | if (rax == 0) { 0x00452a83 jne 0x452a96 | 0x00452a85 mov rax, qword [rip + 0x2593bc] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x00452a8c test rax, rax | | if (rax != 0) { 0x00452a8f jne 0x452a96 | goto label_5; | } 0x00452a91 call 0x460860 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } | label_5: 0x00452a96 mov qword [r14], 0 | *(r14) = 0; 0x00452a9d lea rcx, [r15 + r12 + 0x18] | rcx = r15 + r12 + 0x18; 0x00452aa2 mov qword [rsp + 0x58], rcx | *((rsp + 0x58)) = rcx; 0x00452aa7 movdqa xmm0, xmmword [rip + 0x35181] | __asm ("movdqa xmm0, xmmword [0x00487c30]"); 0x00452aaf movdqu xmmword [r15 + r12 + 0x18], xmm0 | __asm ("movdqu xmmword [r15 + r12 + 0x18], xmm0"); 0x00452ab6 mov qword [r15 + r12 + 0x28], rax | *((r15 + r12 + 0x28)) = rax; 0x00452abb mov rdi, rbp | 0x00452abe call 0x403af0 | rax = strlen (rbp); 0x00452ac3 mov qword [r15 + r12 + 0x18], 0 | *((r15 + r12 + 0x18)) = 0; 0x00452acc mov ecx, 0x48a49f | 0x00452ad1 mov rdi, r14 | 0x00452ad4 mov rsi, rbp | 0x00452ad7 mov rdx, rax | 0x00452ada call 0x464fa0 | bsl::basic_string,bsl::allocator>::privateAppend(char const*,unsigned long,char const*) (r14, rbp, rax, "string<...>::assign(char*...): string too long"); 0x00452adf mov rax, qword [rsp + 0x60] | rax = *((rsp + 0x60)); 0x00452ae4 mov eax, dword [rax + 8] | eax = *((rax + 8)); 0x00452ae7 mov dword [r15 + r12 + 0x30], eax | *((r15 + r12 + 0x30)) = eax; 0x00452aec mov rcx, qword [rsp + 0x18] | rcx = *((rsp + 0x18)); 0x00452af1 and cl, 0x7f | cl &= 0x7f; 0x00452af4 mov rax, qword [r13 + 8] | rax = *((r13 + 8)); 0x00452af8 mov byte [rax + rbx], cl | *((rax + rbx)) = cl; 0x00452afb inc qword [r13 + 0x10] | *((r13 + 0x10))++; 0x00452aff mov r15, qword [rsp + 0x68] | r15 = *((rsp + 0x68)); | } 0x00452b04 imul rax, rbx, 0x38 | rax = rbx * 0x38; 0x00452b08 add rax, qword [r13] | rax += *(r13); 0x00452b0c mov rcx, qword [r13 + 8] | rcx = *((r13 + 8)); 0x00452b10 add rcx, rbx | rcx += rbx; 0x00452b13 not rbx | rbx = ~rbx; 0x00452b16 add rbx, qword [r13 + 0x18] | rbx += *((r13 + 0x18)); 0x00452b1a mov qword [r15], rax | *(r15) = rax; 0x00452b1d mov qword [r15 + 8], rcx | *((r15 + 8)) = rcx; 0x00452b21 mov qword [r15 + 0x10], rbx | *((r15 + 0x10)) = rbx; 0x00452b25 mov eax, dword [rsp + 0xc] | eax = *((rsp + 0xc)); 0x00452b29 mov byte [r15 + 0x18], al | *((r15 + 0x18)) = al; 0x00452b2d mov rax, r15 | rax = r15; 0x00452b30 add rsp, 0x1a8 | 0x00452b37 pop rbx | 0x00452b38 pop r12 | 0x00452b3a pop r13 | 0x00452b3c pop r14 | 0x00452b3e pop r15 | 0x00452b40 pop rbp | 0x00452b41 ret | return rax; | }