; assembly | /* r2dec pseudo code output */ | /* bdlde_charconvertutf16.t/assume @ 0x42b650 */ | #include | ; (fcn) method.BloombergLP::bdlde::CharConvertUtf16.utf8ToUtf16_std::__1::basic_string_wchar_t__std::__1::char_traits_wchar_t___std::__1::allocator_wchar_t_____char_const__unsigned_long__wchar_t__BloombergLP::bdlde::ByteOrder::Enum_ () | uint64_t method_BloombergLP::bdlde::CharConvertUtf16_utf8ToUtf16_std::_1::basic_string_wchar_t_std::_1::char_traits_wchar_t_std::_1::allocator_wchar_t_char_const_unsigned_long_wchar_t_BloombergLP::bdlde::ByteOrder::Enum_ (int64_t arg5, int64_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 >*, char const*, unsigned long*, wchar_t, BloombergLP::bdlde::ByteOrder::Enum) */ 0x0042b650 push rbp | 0x0042b651 push r15 | 0x0042b653 push r14 | 0x0042b655 push r13 | 0x0042b657 push r12 | 0x0042b659 push rbx | 0x0042b65a push rax | 0x0042b65b mov r13d, r8d | r13d = r8d; 0x0042b65e mov r15d, ecx | r15d = ecx; 0x0042b661 mov r12, rdx | r12 = rdx; 0x0042b664 mov rbp, rsi | 0x0042b667 mov rbx, rdi | rbx = rdi; 0x0042b66a mov rdi, rsi | rdi = rsi; 0x0042b66d call 0x431590 | rax = unsigned long(anonymousnamespace)::utf16BufferLength<(anonymousnamespace)::Utf8::ZeroBasedEnd>(char const*,(anonymousnamespace)::Utf8::ZeroBasedEnd) (); 0x0042b672 mov r14, rax | r14 = rax; 0x0042b675 mov al, byte [rbx] | al = *(rbx); 0x0042b677 test al, 1 | | if ((al & 1) == 0) { 0x0042b679 jne 0x42b688 | 0x0042b67b movzx ecx, al | ecx = (int32_t) al; 0x0042b67e shr rcx, 1 | rcx >>= 1; 0x0042b681 cmp r14, rcx | | if (r14 <= rcx) { 0x0042b684 ja 0x42b691 | 0x0042b686 jmp 0x42b6a0 | | } else { 0x0042b688 mov rcx, qword [rbx + 8] | rcx = *((rbx + 8)); 0x0042b68c cmp r14, rcx | | if (r14 <= rcx) { 0x0042b68f jbe 0x42b6a0 | goto label_0; | } | } 0x0042b691 mov rdi, rbx | rdi = rbx; 0x0042b694 mov rsi, r14 | rsi = r14; 0x0042b697 xor edx, edx | edx = 0; 0x0042b699 call 0x4035c0 | std::_1::basic_string,std::_1::allocator>::resize(unsigned long,wchar_t) (); 0x0042b69e mov al, byte [rbx] | al = *(rbx); | } | label_0: 0x0042b6a0 test al, 1 | | if ((al & 1) == 0) { 0x0042b6a2 jne 0x42b6aa | 0x0042b6a4 lea rdi, [rbx + 4] | rdi = rbx + 4; 0x0042b6a8 jmp 0x42b6ae | | } else { 0x0042b6aa mov rdi, qword [rbx + 0x10] | rdi = *((rbx + 0x10)); | } 0x0042b6ae mov rcx, rsp | rcx = rsp; 0x0042b6b1 mov rsi, rbp | rsi = rbp; 0x0042b6b4 mov rdx, r12 | rdx = r12; 0x0042b6b7 mov r8d, r15d | r8d = r15d; 0x0042b6ba test r13d, r13d | | if (r13d != 0) { 0x0042b6bd je 0x42b6c6 | 0x0042b6bf call 0x431ad0 | int(anonymousnamespace)::localUtf8ToUtf16>(wchar_t*,(anonymousnamespace)::NoOpCapacity,char const*,(anonymousnamespace)::Utf8::ZeroBasedEnd,(anonymousnamespace)::Swapper,unsigned long*,unsigned long*,wchar_t) (); 0x0042b6c4 jmp 0x42b6cb | | } else { 0x0042b6c6 call 0x431710 | eax = int(anonymousnamespace)::localUtf8ToUtf16>(wchar_t*,(anonymousnamespace)::NoOpCapacity,char const*,(anonymousnamespace)::Utf8::ZeroBasedEnd,(anonymousnamespace)::NoOpSwapper,unsigned long*,unsigned long*,wchar_t) (); | } 0x0042b6cb mov ebp, eax | 0x0042b6cd mov rsi, qword [rsp] | rsi = *(rsp); 0x0042b6d1 cmp rsi, r14 | 0x0042b6d4 dec rsi | rsi--; 0x0042b6d7 mov rdi, rbx | rdi = rbx; 0x0042b6da xor edx, edx | edx = 0; 0x0042b6dc call 0x4035c0 | std::_1::basic_string,std::_1::allocator>::resize(unsigned long,wchar_t) (); 0x0042b6e1 mov eax, ebp | eax = ebp; 0x0042b6e3 add rsp, 8 | 0x0042b6e7 pop rbx | 0x0042b6e8 pop r12 | 0x0042b6ea pop r13 | 0x0042b6ec pop r14 | 0x0042b6ee pop r15 | 0x0042b6f0 pop rbp | 0x0042b6f1 ret | return rax; | }