; assembly | /* r2dec pseudo code output */ | /* bdlde_charconvertutf16.t/none @ 0x42b4c0 */ | #include | ; (fcn) method.BloombergLP::bdlde::CharConvertUtf16.utf8ToUtf16_std::__1::basic_string_wchar_t__std::__1::char_traits_wchar_t___std::__1::allocator_wchar_t_____std::__1::basic_string_view_char__std::__1::char_traits_char____const__unsigned_long__wchar_t__Bloo () | uint64_t method_BloombergLP::bdlde::CharConvertUtf16_utf8ToUtf16_std::_1::basic_string_wchar_t_std::_1::char_traits_wchar_t_std::_1::allocator_wchar_t_std::_1::basic_string_view_char_std::_1::char_traits_char_const_unsigned_long_wchar_t_Bloo (int64_t arg5, uint32_t arg4, int64_t arg3, int64_t arg2, int64_t arg1) { | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlde::CharConvertUtf16::utf8ToUtf16(std::__1::basic_string, std::__1::allocator >*, std::__1::basic_string_view > const&, unsigned long*, wchar_t, BloombergLP::bdlde::ByteOrder::Enum) */ 0x0042b4c0 push rbp | 0x0042b4c1 push r15 | 0x0042b4c3 push r14 | 0x0042b4c5 push r13 | 0x0042b4c7 push r12 | 0x0042b4c9 push rbx | 0x0042b4ca push rax | 0x0042b4cb mov r12d, r8d | r12d = r8d; 0x0042b4ce mov r14d, ecx | r14d = ecx; 0x0042b4d1 mov r15, rdx | r15 = rdx; 0x0042b4d4 mov rbx, rsi | rbx = rsi; 0x0042b4d7 mov r13, rdi | r13 = rdi; 0x0042b4da mov rdi, qword [rsi] | rdi = *(rsi); 0x0042b4dd mov rbp, qword [rsi + 8] | rbp = *((rsi + 8)); 0x0042b4e1 add rbp, rdi | rbp += rdi; 0x0042b4e4 mov rsi, rbp | rsi = rbp; 0x0042b4e7 call 0x4309a0 | rax = unsigned long(anonymousnamespace)::utf16BufferLength<(anonymousnamespace)::Utf8::PtrBasedEnd>(char const*,(anonymousnamespace)::Utf8::PtrBasedEnd) (); 0x0042b4ec mov cl, byte [r13] | cl = *(r13); 0x0042b4f0 test cl, 1 | | if ((cl & 1) == 0) { 0x0042b4f3 jne 0x42b502 | 0x0042b4f5 movzx edx, cl | edx = (int32_t) cl; 0x0042b4f8 shr rdx, 1 | rdx >>= 1; 0x0042b4fb cmp rax, rdx | | if (rax <= rdx) { 0x0042b4fe ja 0x42b50b | 0x0042b500 jmp 0x42b51c | | } else { 0x0042b502 mov rdx, qword [r13 + 8] | rdx = *((r13 + 8)); 0x0042b506 cmp rax, rdx | | if (rax <= rdx) { 0x0042b509 jbe 0x42b51c | goto label_0; | } | } 0x0042b50b mov rdi, r13 | rdi = r13; 0x0042b50e mov rsi, rax | rsi = rax; 0x0042b511 xor edx, edx | edx = 0; 0x0042b513 call 0x4035c0 | std::_1::basic_string,std::_1::allocator>::resize(unsigned long,wchar_t) (); 0x0042b518 mov cl, byte [r13] | cl = *(r13); | } | label_0: 0x0042b51c test cl, 1 | | if ((cl & 1) == 0) { 0x0042b51f jne 0x42b527 | 0x0042b521 lea rdi, [r13 + 4] | rdi = r13 + 4; 0x0042b525 jmp 0x42b52b | | } else { 0x0042b527 mov rdi, qword [r13 + 0x10] | rdi = *((r13 + 0x10)); | } 0x0042b52b mov rsi, qword [rbx] | rsi = *(rbx); 0x0042b52e mov r8, rsp | r8 = rsp; 0x0042b531 mov rdx, rbp | rdx = rbp; 0x0042b534 mov rcx, r15 | rcx = r15; 0x0042b537 mov r9d, r14d | r9d = r14d; 0x0042b53a test r12d, r12d | | if (r12d != 0) { 0x0042b53d je 0x42b546 | 0x0042b53f call 0x430f10 | int(anonymousnamespace)::localUtf8ToUtf16>(wchar_t*,(anonymousnamespace)::NoOpCapacity,char const*,(anonymousnamespace)::Utf8::PtrBasedEnd,(anonymousnamespace)::Swapper,unsigned long*,unsigned long*,wchar_t) (); 0x0042b544 jmp 0x42b54b | | } else { 0x0042b546 call 0x430b60 | eax = int(anonymousnamespace)::localUtf8ToUtf16>(wchar_t*,(anonymousnamespace)::NoOpCapacity,char const*,(anonymousnamespace)::Utf8::PtrBasedEnd,(anonymousnamespace)::NoOpSwapper,unsigned long*,unsigned long*,wchar_t) (); | } 0x0042b54b mov ebx, eax | ebx = eax; 0x0042b54d mov rsi, qword [rsp] | rsi = *(rsp); 0x0042b551 dec rsi | rsi--; 0x0042b554 mov rdi, r13 | rdi = r13; 0x0042b557 xor edx, edx | edx = 0; 0x0042b559 call 0x4035c0 | std::_1::basic_string,std::_1::allocator>::resize(unsigned long,wchar_t) (); 0x0042b55e mov eax, ebx | eax = ebx; 0x0042b560 add rsp, 8 | 0x0042b564 pop rbx | 0x0042b565 pop r12 | 0x0042b567 pop r13 | 0x0042b569 pop r14 | 0x0042b56b pop r15 | 0x0042b56d pop rbp | 0x0042b56e ret | return rax; | }