; assembly | /* r2dec pseudo code output */ | /* bdlde_charconvertutf16.t/none @ 0x42b620 */ | #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) { | int64_t var_8h; | 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) */ 0x0042b620 push rbp | 0x0042b621 push r15 | 0x0042b623 push r14 | 0x0042b625 push r12 | 0x0042b627 push rbx | 0x0042b628 sub rsp, 0x10 | 0x0042b62c mov r12d, r8d | r12d = r8d; 0x0042b62f mov r14d, ecx | r14d = ecx; 0x0042b632 mov r15, rdx | r15 = rdx; 0x0042b635 mov rbp, rsi | 0x0042b638 mov rbx, rdi | rbx = rdi; 0x0042b63b mov rdi, rsi | rdi = rsi; 0x0042b63e call 0x431370 | rax = unsigned long(anonymousnamespace)::utf16BufferLength<(anonymousnamespace)::Utf8::ZeroBasedEnd>(char const*,(anonymousnamespace)::Utf8::ZeroBasedEnd) (); 0x0042b643 mov cl, byte [rbx] | cl = *(rbx); 0x0042b645 test cl, 1 | | if ((cl & 1) == 0) { 0x0042b648 jne 0x42b657 | 0x0042b64a movzx edx, cl | edx = (int32_t) cl; 0x0042b64d shr rdx, 1 | rdx >>= 1; 0x0042b650 cmp rax, rdx | | if (rax <= rdx) { 0x0042b653 ja 0x42b660 | 0x0042b655 jmp 0x42b66f | | } else { 0x0042b657 mov rdx, qword [rbx + 8] | rdx = *((rbx + 8)); 0x0042b65b cmp rax, rdx | | if (rax <= rdx) { 0x0042b65e jbe 0x42b66f | goto label_0; | } | } 0x0042b660 mov rdi, rbx | rdi = rbx; 0x0042b663 mov rsi, rax | rsi = rax; 0x0042b666 xor edx, edx | edx = 0; 0x0042b668 call 0x4035c0 | std::_1::basic_string,std::_1::allocator>::resize(unsigned long,wchar_t) (); 0x0042b66d mov cl, byte [rbx] | cl = *(rbx); | } | label_0: 0x0042b66f test cl, 1 | | if ((cl & 1) == 0) { 0x0042b672 jne 0x42b67a | 0x0042b674 lea rdi, [rbx + 4] | rdi = rbx + 4; 0x0042b678 jmp 0x42b67e | | } else { 0x0042b67a mov rdi, qword [rbx + 0x10] | rdi = *((rbx + 0x10)); | } 0x0042b67e lea rcx, [rsp + 8] | rcx = rsp + 8; 0x0042b683 mov rsi, rbp | rsi = rbp; 0x0042b686 mov rdx, r15 | rdx = r15; 0x0042b689 mov r8d, r14d | r8d = r14d; 0x0042b68c test r12d, r12d | | if (r12d != 0) { 0x0042b68f je 0x42b698 | 0x0042b691 call 0x4318b0 | int(anonymousnamespace)::localUtf8ToUtf16>(wchar_t*,(anonymousnamespace)::NoOpCapacity,char const*,(anonymousnamespace)::Utf8::ZeroBasedEnd,(anonymousnamespace)::Swapper,unsigned long*,unsigned long*,wchar_t) (); 0x0042b696 jmp 0x42b69d | | } else { 0x0042b698 call 0x4314f0 | eax = int(anonymousnamespace)::localUtf8ToUtf16>(wchar_t*,(anonymousnamespace)::NoOpCapacity,char const*,(anonymousnamespace)::Utf8::ZeroBasedEnd,(anonymousnamespace)::NoOpSwapper,unsigned long*,unsigned long*,wchar_t) (); | } 0x0042b69d mov ebp, eax | 0x0042b69f mov rsi, qword [rsp + 8] | rsi = *((rsp + 8)); 0x0042b6a4 dec rsi | rsi--; 0x0042b6a7 mov rdi, rbx | rdi = rbx; 0x0042b6aa xor edx, edx | edx = 0; 0x0042b6ac call 0x4035c0 | std::_1::basic_string,std::_1::allocator>::resize(unsigned long,wchar_t) (); 0x0042b6b1 mov eax, ebp | eax = ebp; 0x0042b6b3 add rsp, 0x10 | 0x0042b6b7 pop rbx | 0x0042b6b8 pop r12 | 0x0042b6ba pop r14 | 0x0042b6bc pop r15 | 0x0042b6be pop rbp | 0x0042b6bf ret | return rax; | }