; assembly | /* r2dec pseudo code output */ | /* bdlde_charconvertutf16.t/none @ 0x42b760 */ | #include | ; (fcn) method.BloombergLP::bdlde::CharConvertUtf16.utf8ToUtf16_std::__1::vector_unsigned_short__std::__1::allocator_unsigned_short_____std::__1::basic_string_view_char__std::__1::char_traits_char____const__unsigned_long__unsigned_short__BloombergLP::bdlde::B () | uint64_t method_BloombergLP::bdlde::CharConvertUtf16_utf8ToUtf16_std::_1::vector_unsigned_short_std::_1::allocator_unsigned_short_std::_1::basic_string_view_char_std::_1::char_traits_char_const_unsigned_long_unsigned_short_BloombergLP::bdlde::B (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::vector >*, std::__1::basic_string_view > const&, unsigned long*, unsigned short, BloombergLP::bdlde::ByteOrder::Enum) */ 0x0042b760 push rbp | 0x0042b761 push r15 | 0x0042b763 push r14 | 0x0042b765 push r13 | 0x0042b767 push r12 | 0x0042b769 push rbx | 0x0042b76a push rax | 0x0042b76b mov r13d, r8d | r13d = r8d; 0x0042b76e mov r12d, ecx | r12d = ecx; 0x0042b771 mov r14, rdx | r14 = rdx; 0x0042b774 mov rbp, rsi | 0x0042b777 mov r15, rdi | r15 = rdi; 0x0042b77a mov rdi, qword [rsi] | rdi = *(rsi); 0x0042b77d mov rbx, qword [rsi + 8] | rbx = *((rsi + 8)); 0x0042b781 add rbx, rdi | rbx += rdi; 0x0042b784 mov rsi, rbx | rsi = rbx; 0x0042b787 call 0x4309a0 | rax = unsigned long(anonymousnamespace)::utf16BufferLength<(anonymousnamespace)::Utf8::PtrBasedEnd>(char const*,(anonymousnamespace)::Utf8::PtrBasedEnd) (); 0x0042b78c mov rdi, qword [r15] | rdi = *(r15); 0x0042b78f mov rcx, qword [r15 + 8] | rcx = *((r15 + 8)); 0x0042b793 sub rcx, rdi | rcx -= rdi; 0x0042b796 sar rcx, 1 | rcx >>= 1; 0x0042b799 sub rax, rcx | rax -= rcx; | if (rax > 0) { 0x0042b79c jbe 0x42b7ac | 0x0042b79e mov rdi, r15 | 0x0042b7a1 mov rsi, rax | 0x0042b7a4 call 0x429470 | std::_1::vector>::_append(unsigned long) (r15, rax); 0x0042b7a9 mov rdi, qword [r15] | rdi = *(r15); | } 0x0042b7ac mov rsi, qword [rbp] | rsi = *(rbp); 0x0042b7b0 movzx r9d, r12w | r9d = (int32_t) r12w; 0x0042b7b4 mov r8, rsp | r8 = rsp; 0x0042b7b7 mov rdx, rbx | rdx = rbx; 0x0042b7ba mov rcx, r14 | rcx = r14; 0x0042b7bd test r13d, r13d | | if (r13d != 0) { 0x0042b7c0 je 0x42b7c9 | 0x0042b7c2 call 0x432020 | int(anonymousnamespace)::localUtf8ToUtf16>(unsignedshort*,(anonymousnamespace)::NoOpCapacity,char const*,(anonymousnamespace)::Utf8::PtrBasedEnd,(anonymousnamespace)::Swapper,unsigned long*,unsigned long*,unsignedshort) (); 0x0042b7c7 jmp 0x42b7ce | | } else { 0x0042b7c9 call 0x431c50 | eax = int(anonymousnamespace)::localUtf8ToUtf16>(unsignedshort*,(anonymousnamespace)::NoOpCapacity,char const*,(anonymousnamespace)::Utf8::PtrBasedEnd,(anonymousnamespace)::NoOpSwapper,unsigned long*,unsigned long*,unsignedshort) (); | } 0x0042b7ce mov ebx, eax | ebx = eax; 0x0042b7d0 mov rax, qword [rsp] | rax = *(rsp); 0x0042b7d4 mov rcx, qword [r15] | rcx = *(r15); 0x0042b7d7 mov rdx, qword [r15 + 8] | rdx = *((r15 + 8)); 0x0042b7db sub rdx, rcx | rdx -= rcx; 0x0042b7de sar rdx, 1 | rdx >>= 1; 0x0042b7e1 mov rsi, rax | rsi = rax; 0x0042b7e4 sub rsi, rdx | rsi -= rdx; | if (rsi != 0) { 0x0042b7e7 je 0x42b802 | | if (rsi > 0) { 0x0042b7e9 jbe 0x42b7f5 | 0x0042b7eb mov rdi, r15 | 0x0042b7ee call 0x429470 | rax = std::_1::vector>::_append(unsigned long) (r15, rsi); 0x0042b7f3 jmp 0x42b802 | | } else { 0x0042b7f5 cmp rax, rdx | | if (rax >= rdx) { 0x0042b7f8 jae 0x42b802 | goto label_0; | } 0x0042b7fa lea rax, [rcx + rax*2] | rax = rcx + rax*2; 0x0042b7fe mov qword [r15 + 8], rax | *((r15 + 8)) = rax; | } | } | label_0: 0x0042b802 mov eax, ebx | eax = ebx; 0x0042b804 add rsp, 8 | 0x0042b808 pop rbx | 0x0042b809 pop r12 | 0x0042b80b pop r13 | 0x0042b80d pop r14 | 0x0042b80f pop r15 | 0x0042b811 pop rbp | 0x0042b812 ret | return rax; | }