; assembly | /* r2dec pseudo code output */ | /* bdlc_flathashmap.t/none @ 0x4528e0 */ | #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_30h; | uint32_t var_38h; | int64_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; 0x004528e0 push rbp | 0x004528e1 push r15 | 0x004528e3 push r14 | 0x004528e5 push r13 | 0x004528e7 push r12 | 0x004528e9 push rbx | 0x004528ea sub rsp, 0x1a8 | 0x004528f1 mov r15, rdx | r15 = rdx; 0x004528f4 mov r13, rsi | r13 = rsi; 0x004528f7 mov r14, rdi | r14 = rdi; 0x004528fa mov rbx, qword [rdx] | rbx = *(rdx); 0x004528fd mov rax, qword [rip + 0x25a544] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x00452904 test rax, rax | | if (rax == 0) { 0x00452907 jne 0x45290e | 0x00452909 call 0x460a70 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } 0x0045290e mov qword [rsp + 0x18], 0 | *((rsp + 0x18)) = 0; 0x00452917 mov qword [rsp + 0x38], 0x17 | *((rsp + 0x38)) = 0x17; 0x00452920 mov qword [rsp + 0x40], rax | *((rsp + 0x40)) = rax; 0x00452925 mov rdi, rbx | 0x00452928 call 0x403af0 | rax = strlen (rbx); 0x0045292d mov qword [rsp + 0x30], 0 | *((rsp + 0x30)) = 0; 0x00452936 lea rbp, [rsp + 0x18] | rbp = rsp + 0x18; 0x0045293b mov ecx, 0x48a6fb | 0x00452940 mov rdi, rbp | 0x00452943 mov rsi, rbx | 0x00452946 mov rdx, rax | 0x00452949 call 0x4651c0 | bsl::basic_string,bsl::allocator>::privateAppend(char const*,unsigned long,char const*) (rbp, rbx, rax, "string<...>::assign(char*...): string too long"); 0x0045294e mov eax, dword [r15 + 8] | eax = *((r15 + 8)); 0x00452952 mov dword [rsp + 0x48], eax | *((rsp + 0x48)) = eax; 0x00452956 mov qword [rsp + 0x198], 0 | *((rsp + 0x198)) = 0; 0x00452962 mov byte [rsp + 0x1a0], 0 | *((rsp + 0x1a0)) = 0; 0x0045296a movdqa xmm0, xmmword [rip + 0x3552e] | __asm ("movdqa xmm0, xmmword [0x00487ea0]"); 0x00452972 movdqu xmmword [rsp + 0x138], xmm0 | __asm ("movdqu xmmword [rsp + 0x138], xmm0"); 0x0045297b mov rdx, qword [rsp + 0x30] | rdx = *((rsp + 0x30)); 0x00452980 cmp qword [rsp + 0x38], 0x17 | | if (*((rsp + 0x38)) != 0x17) { 0x00452986 je 0x45298d | 0x00452988 mov rbp, qword [rsp + 0x18] | rbp = *((rsp + 0x18)); | } 0x0045298d lea rdi, [rsp + 0x78] | 0x00452992 mov rsi, rbp | 0x00452995 call 0x45f9d0 | BloombergLP::bslh::SpookyHashAlgorithmImp::update(voidconst*,unsigned long) (rsp + 0x78, rbp, rdx); 0x0045299a mov rax, qword [rsp + 0x30] | rax = *((rsp + 0x30)); 0x0045299f mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x004529a4 lea rdi, [rsp + 0x78] | 0x004529a9 lea rsi, [rsp + 0x10] | 0x004529ae mov edx, 8 | 0x004529b3 call 0x45f9d0 | BloombergLP::bslh::SpookyHashAlgorithmImp::update(voidconst*,unsigned long) (rsp + 0x78, rsp + 0x10, 8); 0x004529b8 lea rdi, [rsp + 0x78] | 0x004529bd lea rsi, [rsp + 0x10] | 0x004529c2 lea rdx, [rsp + 0x70] | 0x004529c7 call 0x45ef50 | BloombergLP::bslh::SpookyHashAlgorithmImp::finalize(unsigned long long*,unsigned long long*) (rsp + 0x78, rsp + 0x10, rsp + 0x70); 0x004529cc movabs r12, 0x9e3779b97f4a7c15 | r12 = 0x9e3779b97f4a7c15; 0x004529d6 imul r12, qword [rsp + 0x10] | r12 *= *((rsp + 0x10)); 0x004529dc cmp qword [rsp + 0x38], 0x17 | | if (*((rsp + 0x38)) != 0x17) { 0x004529e2 je 0x4529f4 | 0x004529e4 mov rsi, qword [rsp + 0x18] | rsi = *((rsp + 0x18)); 0x004529e9 mov rdi, qword [rsp + 0x40] | rdi = *((rsp + 0x40)); 0x004529ee mov rax, qword [rdi] | rax = *(rdi); 0x004529f1 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x004529f4 mov rbx, qword [r15] | rbx = *(r15); 0x004529f7 mov rax, qword [rip + 0x25a44a] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x004529fe test rax, rax | | if (rax == 0) { 0x00452a01 jne 0x452a08 | 0x00452a03 call 0x460a70 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } 0x00452a08 mov qword [rsp + 0x78], 0 | *((rsp + 0x78)) = 0; 0x00452a11 movdqa xmm0, xmmword [rip + 0x35477] | __asm ("movdqa xmm0, xmmword [0x00487e90]"); 0x00452a19 movdqu xmmword [rsp + 0x90], xmm0 | __asm ("movdqu xmmword [rsp + 0x90], xmm0"); 0x00452a22 mov qword [rsp + 0xa0], rax | *((rsp + 0xa0)) = rax; 0x00452a2a mov rdi, rbx | 0x00452a2d call 0x403af0 | rax = strlen (rbx); 0x00452a32 mov qword [rsp + 0x90], 0 | *((rsp + 0x90)) = 0; 0x00452a3e lea rbp, [rsp + 0x78] | rbp = rsp + 0x78; 0x00452a43 mov ecx, 0x48a6fb | 0x00452a48 mov rdi, rbp | 0x00452a4b mov rsi, rbx | 0x00452a4e mov rdx, rax | 0x00452a51 call 0x4651c0 | bsl::basic_string,bsl::allocator>::privateAppend(char const*,unsigned long,char const*) (rbp, rbx, rax, "string<...>::assign(char*...): string too long"); 0x00452a56 mov eax, dword [r15 + 8] | eax = *((r15 + 8)); 0x00452a5a mov dword [rsp + 0xa8], eax | *((rsp + 0xa8)) = eax; 0x00452a61 mov rdi, r13 | rdi = r13; 0x00452a64 mov rsi, rbp | rsi = rbp; 0x00452a67 mov rdx, r12 | rdx = r12; 0x00452a6a call 0x44ea60 | 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 (); 0x00452a6f mov rbx, rax | rbx = rax; 0x00452a72 cmp rax, qword [r13 + 0x18] | | if (rax != *((r13 + 0x18))) { 0x00452a76 jne 0x452b03 | goto label_0; | } 0x00452a7c mov rax, rbx | rax = rbx; 0x00452a7f shr rax, 3 | rax >>= 3; 0x00452a83 lea rcx, [rax*8] | rcx = rax*8; 0x00452a8b sub rcx, rax | rcx -= rax; 0x00452a8e cmp qword [r13 + 0x10], rcx | | if (*((r13 + 0x10)) >= rcx) { 0x00452a92 jb 0x452ab0 | 0x00452a94 lea rax, [rbx + rbx] | rax = rbx + rbx; 0x00452a98 test rbx, rbx | 0x00452a9b mov esi, 0x20 | esi = 0x20; | if (rbx != 0) { 0x00452aa0 cmovne rsi, rax | rsi = rax; | } 0x00452aa4 mov rdi, r13 | 0x00452aa7 call 0x44ebe0 | 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); 0x00452aac mov rbx, qword [r13 + 0x18] | rbx = *((r13 + 0x18)); | } 0x00452ab0 test rbx, rbx | | if (rbx == 0) { 0x00452ab3 je 0x452b1b | goto label_1; | } 0x00452ab5 mov cl, byte [r13 + 0x20] | cl = *((r13 + 0x20)); 0x00452ab9 mov rax, r12 | rax = r12; 0x00452abc shr rax, cl | rax >>= cl; 0x00452abf mov rcx, qword [r13 + 8] | rcx = *((r13 + 8)); 0x00452ac3 shl rax, 4 | rax <<= 4; 0x00452ac7 lea rdx, [rbx - 1] | rdx = rbx - 1; 0x00452acb xor esi, esi | esi = 0; 0x00452acd nop dword [rax] | | do { 0x00452ad0 movdqu xmm0, xmmword [rcx + rax] | __asm ("movdqu xmm0, xmmword [rcx + rax]"); 0x00452ad5 pmovmskb edi, xmm0 | __asm ("pmovmskb edi, xmm0"); 0x00452ad9 test di, di | | if (di != 0) { 0x00452adc jne 0x452b32 | goto label_2; | } 0x00452ade add rax, 0x10 | rax += 0x10; 0x00452ae2 and rax, rdx | rax &= rdx; 0x00452ae5 add rsi, 0x10 | rsi += 0x10; 0x00452ae9 cmp rsi, rbx | 0x00452aec jb 0x452ad0 | | } while (rsi < rbx); 0x00452aee mov al, 1 | al = 1; 0x00452af0 mov dword [rsp + 0xc], eax | *((rsp + 0xc)) = eax; 0x00452af4 xor ebp, ebp | ebp = 0; 0x00452af6 cmp qword [rsp + 0x98], 0x17 | | if (*((rsp + 0x98)) == 0x17) { 0x00452aff jne 0x452b51 | 0x00452b01 jmp 0x452b64 | goto label_3; | label_0: 0x00452b03 mov bpl, 1 | bpl = 1; 0x00452b06 mov dword [rsp + 0xc], 0 | *((rsp + 0xc)) = 0; 0x00452b0e cmp qword [rsp + 0x98], 0x17 | | if (*((rsp + 0x98)) != 0x17) { 0x00452b17 jne 0x452b51 | goto label_4; | } 0x00452b19 jmp 0x452b64 | goto label_3; | label_1: 0x00452b1b mov al, 1 | al = 1; 0x00452b1d mov dword [rsp + 0xc], eax | *((rsp + 0xc)) = eax; 0x00452b21 xor ebp, ebp | ebp = 0; 0x00452b23 xor ebx, ebx | ebx = 0; 0x00452b25 cmp qword [rsp + 0x98], 0x17 | | if (*((rsp + 0x98)) != 0x17) { 0x00452b2e jne 0x452b51 | goto label_4; | } 0x00452b30 jmp 0x452b64 | goto label_3; | label_2: 0x00452b32 mov cl, 1 | cl = 1; 0x00452b34 mov dword [rsp + 0xc], ecx | *((rsp + 0xc)) = ecx; 0x00452b38 movzx ecx, di | ecx = (int32_t) di; 0x00452b3b bsf ecx, ecx | __asm ("bsf ecx, ecx"); 0x00452b3e add rax, rcx | rax += rcx; 0x00452b41 xor ebp, ebp | ebp = 0; 0x00452b43 mov rbx, rax | rbx = rax; 0x00452b46 cmp qword [rsp + 0x98], 0x17 | | if (*((rsp + 0x98)) == 0x17) { 0x00452b4f je 0x452b64 | goto label_3; | } | } | label_4: 0x00452b51 mov rsi, qword [rsp + 0x78] | rsi = *((rsp + 0x78)); 0x00452b56 mov rdi, qword [rsp + 0xa0] | rdi = *((rsp + 0xa0)); 0x00452b5e mov rax, qword [rdi] | rax = *(rdi); 0x00452b61 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | label_3: 0x00452b64 test bpl, bpl | | if (bpl == 0) { 0x00452b67 jne 0x452c17 | 0x00452b6d mov qword [rsp + 0x58], r12 | *((rsp + 0x58)) = r12; 0x00452b72 mov qword [rsp + 0x68], r14 | *((rsp + 0x68)) = r14; 0x00452b77 mov rcx, r15 | rcx = r15; 0x00452b7a mov r15, qword [r13] | r15 = *(r13); 0x00452b7e mov rax, qword [r13 + 0x28] | rax = *((r13 + 0x28)); 0x00452b82 imul r12, rbx, 0x38 | r12 = rbx * 0x38; 0x00452b86 lea rbp, [r15 + r12] | rbp = r15 + r12; 0x00452b8a mov qword [rsp + 0x60], rcx | *((rsp + 0x60)) = rcx; 0x00452b8f mov r14, qword [rcx] | r14 = *(rcx); 0x00452b92 test rax, rax | | if (rax == 0) { 0x00452b95 jne 0x452ba8 | 0x00452b97 mov rax, qword [rip + 0x25a2aa] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x00452b9e test rax, rax | | if (rax != 0) { 0x00452ba1 jne 0x452ba8 | goto label_5; | } 0x00452ba3 call 0x460a70 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } | label_5: 0x00452ba8 mov qword [rbp], 0 | *(rbp) = 0; 0x00452bb0 lea rcx, [r15 + r12 + 0x18] | rcx = r15 + r12 + 0x18; 0x00452bb5 mov qword [rsp + 0x50], rcx | *((rsp + 0x50)) = rcx; 0x00452bba movdqa xmm0, xmmword [rip + 0x352ce] | __asm ("movdqa xmm0, xmmword [0x00487e90]"); 0x00452bc2 movdqu xmmword [r15 + r12 + 0x18], xmm0 | __asm ("movdqu xmmword [r15 + r12 + 0x18], xmm0"); 0x00452bc9 mov qword [r15 + r12 + 0x28], rax | *((r15 + r12 + 0x28)) = rax; 0x00452bce mov rdi, r14 | 0x00452bd1 call 0x403af0 | rax = strlen (r14); 0x00452bd6 mov qword [r15 + r12 + 0x18], 0 | *((r15 + r12 + 0x18)) = 0; 0x00452bdf mov ecx, 0x48a6fb | 0x00452be4 mov rdi, rbp | 0x00452be7 mov rsi, r14 | 0x00452bea mov rdx, rax | 0x00452bed call 0x4651c0 | bsl::basic_string,bsl::allocator>::privateAppend(char const*,unsigned long,char const*) (rbp, r14, rax, "string<...>::assign(char*...): string too long"); 0x00452bf2 mov rax, qword [rsp + 0x60] | rax = *((rsp + 0x60)); 0x00452bf7 mov eax, dword [rax + 8] | eax = *((rax + 8)); 0x00452bfa mov dword [r15 + r12 + 0x30], eax | *((r15 + r12 + 0x30)) = eax; 0x00452bff mov rcx, qword [rsp + 0x58] | rcx = *((rsp + 0x58)); 0x00452c04 and cl, 0x7f | cl &= 0x7f; 0x00452c07 mov rax, qword [r13 + 8] | rax = *((r13 + 8)); 0x00452c0b mov byte [rax + rbx], cl | *((rax + rbx)) = cl; 0x00452c0e inc qword [r13 + 0x10] | *((r13 + 0x10))++; 0x00452c12 mov r14, qword [rsp + 0x68] | r14 = *((rsp + 0x68)); | } 0x00452c17 imul rax, rbx, 0x38 | rax = rbx * 0x38; 0x00452c1b add rax, qword [r13] | rax += *(r13); 0x00452c1f mov rcx, qword [r13 + 8] | rcx = *((r13 + 8)); 0x00452c23 add rcx, rbx | rcx += rbx; 0x00452c26 not rbx | rbx = ~rbx; 0x00452c29 add rbx, qword [r13 + 0x18] | rbx += *((r13 + 0x18)); 0x00452c2d mov qword [r14], rax | *(r14) = rax; 0x00452c30 mov qword [r14 + 8], rcx | *((r14 + 8)) = rcx; 0x00452c34 mov qword [r14 + 0x10], rbx | *((r14 + 0x10)) = rbx; 0x00452c38 mov eax, dword [rsp + 0xc] | eax = *((rsp + 0xc)); 0x00452c3c mov byte [r14 + 0x18], al | *((r14 + 0x18)) = al; 0x00452c40 mov rax, r14 | rax = r14; 0x00452c43 add rsp, 0x1a8 | 0x00452c4a pop rbx | 0x00452c4b pop r12 | 0x00452c4d pop r13 | 0x00452c4f pop r14 | 0x00452c51 pop r15 | 0x00452c53 pop rbp | 0x00452c54 ret | return rax; | }