; assembly | /* r2dec pseudo code output */ | /* bdlde_charconvertutf16.t/none @ 0x42b8b0 */ | #include | ; (fcn) method.BloombergLP::bdlde::CharConvertUtf16.utf8ToUtf16_std::__1::vector_unsigned_short__std::__1::allocator_unsigned_short_____char_const__unsigned_long__unsigned_short__BloombergLP::bdlde::ByteOrder::Enum_ () | uint64_t method_BloombergLP::bdlde::CharConvertUtf16_utf8ToUtf16_std::_1::vector_unsigned_short_std::_1::allocator_unsigned_short_char_const_unsigned_long_unsigned_short_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::vector >*, char const*, unsigned long*, unsigned short, BloombergLP::bdlde::ByteOrder::Enum) */ 0x0042b8b0 push rbp | 0x0042b8b1 push r15 | 0x0042b8b3 push r14 | 0x0042b8b5 push r12 | 0x0042b8b7 push rbx | 0x0042b8b8 sub rsp, 0x10 | 0x0042b8bc mov ebp, r8d | 0x0042b8bf mov r12d, ecx | r12d = ecx; 0x0042b8c2 mov r14, rdx | r14 = rdx; 0x0042b8c5 mov r15, rsi | r15 = rsi; 0x0042b8c8 mov rbx, rdi | rbx = rdi; 0x0042b8cb mov rdi, rsi | rdi = rsi; 0x0042b8ce call 0x431370 | rax = unsigned long(anonymousnamespace)::utf16BufferLength<(anonymousnamespace)::Utf8::ZeroBasedEnd>(char const*,(anonymousnamespace)::Utf8::ZeroBasedEnd) (); 0x0042b8d3 mov rdi, qword [rbx] | rdi = *(rbx); 0x0042b8d6 mov rcx, qword [rbx + 8] | rcx = *((rbx + 8)); 0x0042b8da sub rcx, rdi | rcx -= rdi; 0x0042b8dd sar rcx, 1 | rcx >>= 1; 0x0042b8e0 sub rax, rcx | rax -= rcx; | if (rax > 0) { 0x0042b8e3 jbe 0x42b8f3 | 0x0042b8e5 mov rdi, rbx | 0x0042b8e8 mov rsi, rax | 0x0042b8eb call 0x429470 | std::_1::vector>::_append(unsigned long) (rbx, rax); 0x0042b8f0 mov rdi, qword [rbx] | rdi = *(rbx); | } 0x0042b8f3 movzx r8d, r12w | r8d = (int32_t) r12w; 0x0042b8f7 lea rcx, [rsp + 8] | rcx = rsp + 8; 0x0042b8fc mov rsi, r15 | rsi = r15; 0x0042b8ff mov rdx, r14 | rdx = r14; 0x0042b902 test ebp, ebp | | if (ebp != 0) { 0x0042b904 je 0x42b90d | 0x0042b906 call 0x432800 | int(anonymousnamespace)::localUtf8ToUtf16>(unsignedshort*,(anonymousnamespace)::NoOpCapacity,char const*,(anonymousnamespace)::Utf8::ZeroBasedEnd,(anonymousnamespace)::Swapper,unsigned long*,unsigned long*,unsignedshort) (); 0x0042b90b jmp 0x42b912 | | } else { 0x0042b90d call 0x432440 | eax = int(anonymousnamespace)::localUtf8ToUtf16>(unsignedshort*,(anonymousnamespace)::NoOpCapacity,char const*,(anonymousnamespace)::Utf8::ZeroBasedEnd,(anonymousnamespace)::NoOpSwapper,unsigned long*,unsigned long*,unsignedshort) (); | } 0x0042b912 mov ebp, eax | 0x0042b914 mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x0042b919 mov rcx, qword [rbx] | rcx = *(rbx); 0x0042b91c mov rdx, qword [rbx + 8] | rdx = *((rbx + 8)); 0x0042b920 sub rdx, rcx | rdx -= rcx; 0x0042b923 sar rdx, 1 | rdx >>= 1; 0x0042b926 mov rsi, rax | rsi = rax; 0x0042b929 sub rsi, rdx | rsi -= rdx; | if (rsi != 0) { 0x0042b92c je 0x42b947 | | if (rsi > 0) { 0x0042b92e jbe 0x42b93a | 0x0042b930 mov rdi, rbx | 0x0042b933 call 0x429470 | rax = std::_1::vector>::_append(unsigned long) (rbx, rsi); 0x0042b938 jmp 0x42b947 | | } else { 0x0042b93a cmp rax, rdx | | if (rax >= rdx) { 0x0042b93d jae 0x42b947 | goto label_0; | } 0x0042b93f lea rax, [rcx + rax*2] | rax = rcx + rax*2; 0x0042b943 mov qword [rbx + 8], rax | *((rbx + 8)) = rax; | } | } | label_0: 0x0042b947 mov eax, ebp | eax = ebp; 0x0042b949 add rsp, 0x10 | 0x0042b94d pop rbx | 0x0042b94e pop r12 | 0x0042b950 pop r14 | 0x0042b952 pop r15 | 0x0042b954 pop rbp | 0x0042b955 ret | return rax; | }