; assembly | /* r2dec pseudo code output */ | /* bdlde_charconvertutf16.t/assume @ 0x42f640 */ | #include | ; (fcn) method.BloombergLP::bdlde::CharConvertUtf16.utf16ToUtf8_std::__1::vector_char__std::__1::allocator_char_____std::__1::basic_string_view_wchar_t__std::__1::char_traits_wchar_t____const__unsigned_long__char__BloombergLP::bdlde::ByteOrder::Enum_ () | int64_t method_BloombergLP::bdlde::CharConvertUtf16_utf16ToUtf8_std::_1::vector_char_std::_1::allocator_char_std::_1::basic_string_view_wchar_t_std::_1::char_traits_wchar_t_const_unsigned_long_char_BloombergLP::bdlde::ByteOrder::Enum_ (int64_t arg5, int64_t arg4, uint32_t arg3, int64_t arg2, size_t arg1) { | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlde::CharConvertUtf16::utf16ToUtf8(std::__1::vector >*, std::__1::basic_string_view > const&, unsigned long*, char, BloombergLP::bdlde::ByteOrder::Enum) */ 0x0042f640 push rbp | 0x0042f641 push r15 | 0x0042f643 push r14 | 0x0042f645 push r13 | 0x0042f647 push r12 | 0x0042f649 push rbx | 0x0042f64a push rax | 0x0042f64b mov r13d, ecx | r13d = ecx; 0x0042f64e mov r14, rdx | r14 = rdx; 0x0042f651 mov r12, rdi | r12 = rdi; 0x0042f654 mov r15, qword [rsi] | r15 = *(rsi); 0x0042f657 mov rax, qword [rsi + 8] | rax = *((rsi + 8)); 0x0042f65b lea rbx, [r15 + rax*4] | rbx = r15 + rax*4; 0x0042f65f xor ebp, ebp | ebp = 0; 0x0042f661 test r8d, r8d | | if (r8d == 0) { 0x0042f664 je 0x42f742 | goto label_6; | } 0x0042f66a test rax, rax | | if (rax <= 0) { 0x0042f66d jle 0x42f705 | goto label_7; | } 0x0042f673 mov r8d, 0xfc0000 | r8d = 0xfc0000; 0x0042f679 mov rcx, r15 | rcx = r15; 0x0042f67c jmp 0x42f696 | goto label_8; | label_0: 0x0042f680 cmp edi, 0x800 | 0x0042f686 sbb rbp, 0 | 0x0042f68a add rbp, 3 | rbp += 3; | do { | label_2: 0x0042f68e mov rcx, rdx | rcx = rdx; 0x0042f691 cmp rdx, rbx | | if (rdx >= rbx) { 0x0042f694 jae 0x42f705 | goto label_7; | } | label_8: 0x0042f696 mov esi, dword [rcx] | esi = *(rcx); 0x0042f698 mov edx, esi | edx = *(rcx); 0x0042f69a shr edx, 0x18 | edx >>= 0x18; 0x0042f69d mov edi, esi | edi = esi; 0x0042f69f shr edi, 8 | edi >>= 8; 0x0042f6a2 and edi, 0xff00 | edi &= 0xff00; 0x0042f6a8 or edi, edx | edi |= edx; 0x0042f6aa cmp edi, 0x7f | | if (edi > 0x7f) { 0x0042f6ad ja 0x42f6c0 | goto label_9; | } 0x0042f6af add rcx, 4 | rcx += 4; 0x0042f6b3 inc rbp | rbp++; | label_1: 0x0042f6b6 mov rdx, rcx | rdx = rcx; 0x0042f6b9 jmp 0x42f68e | | } while (1); | label_9: 0x0042f6c0 mov eax, esi | eax = esi; 0x0042f6c2 and eax, 0xf80000 | eax &= 0xf80000; 0x0042f6c7 lea rdx, [rcx + 4] | rdx = rcx + 4; 0x0042f6cb cmp eax, 0xd80000 | | if (eax != 0xd80000) { 0x0042f6d0 jne 0x42f680 | goto label_0; | } 0x0042f6d2 cmp rdx, rbx | | if (rdx < rbx) { 0x0042f6d5 jae 0x42f700 | 0x0042f6d7 and esi, 0xfc0000 | esi &= 0xfc0000; 0x0042f6dd cmp esi, 0xd80000 | | if (esi != 0xd80000) { 0x0042f6e3 jne 0x42f700 | goto label_10; | } 0x0042f6e5 mov eax, dword [rdx] | eax = *(rdx); 0x0042f6e7 and eax, r8d | eax &= r8d; 0x0042f6ea cmp eax, 0xdc0000 | | if (eax != 0xdc0000) { 0x0042f6ef jne 0x42f700 | goto label_10; | } 0x0042f6f1 add rcx, 8 | rcx += 8; 0x0042f6f5 add rbp, 4 | rbp += 4; 0x0042f6f9 jmp 0x42f6b6 | goto label_1; | } | label_10: 0x0042f700 inc rbp | rbp++; 0x0042f703 jmp 0x42f68e | goto label_2; | label_7: 0x0042f705 inc rbp | rbp++; 0x0042f708 mov rdi, qword [r12] | rdi = *(r12); 0x0042f70c mov rax, qword [r12 + 8] | rax = *((r12 + 8)); 0x0042f711 sub rax, rdi | rax -= rdi; 0x0042f714 cmp rbp, rax | | if (rbp > rax) { 0x0042f717 jbe 0x42f728 | 0x0042f719 mov rdi, r12 | 0x0042f71c mov rsi, rbp | 0x0042f71f call 0x433ab0 | std::_1::vector>::resize(unsigned long) (r12, rbp); 0x0042f724 mov rdi, qword [r12] | rdi = *(r12); | } 0x0042f728 movsx r9d, r13b | r9d = (int32_t) r13b; 0x0042f72c mov r8, rsp | r8 = rsp; 0x0042f72f mov rsi, r15 | rsi = r15; 0x0042f732 mov rdx, rbx | rdx = rbx; 0x0042f735 mov rcx, r14 | rcx = r14; 0x0042f738 call 0x4335a0 | rax = int(anonymousnamespace)::localUtf16ToUtf8,(anonymousnamespace)::Swapper>(char*,(anonymousnamespace)::NoOpCapacity,wchar_tconst*,(anonymousnamespace)::Utf16::PtrBasedEnd,(anonymousnamespace)::Swapper,unsigned long*,unsigned long*,char) (); 0x0042f73d jmp 0x42f80d | goto label_11; | label_6: 0x0042f742 test rax, rax | | if (rax <= 0) { 0x0042f745 jle 0x42f7d5 | goto label_12; | } 0x0042f74b mov eax, 0xfc00 | eax = 0xfc00; 0x0042f750 mov rcx, r15 | rcx = r15; 0x0042f753 jmp 0x42f776 | goto label_13; | label_3: 0x0042f760 cmp esi, 0x800 | 0x0042f766 sbb rbp, 0 | 0x0042f76a add rbp, 3 | rbp += 3; | do { | label_5: 0x0042f76e mov rcx, rdx | rcx = rdx; 0x0042f771 cmp rdx, rbx | | if (rdx >= rbx) { 0x0042f774 jae 0x42f7d5 | goto label_12; | } | label_13: 0x0042f776 mov esi, dword [rcx] | esi = *(rcx); 0x0042f778 cmp esi, 0x7f | | if (esi > 0x7f) { 0x0042f77b ja 0x42f790 | goto label_14; | } 0x0042f77d add rcx, 4 | rcx += 4; 0x0042f781 inc rbp | rbp++; | label_4: 0x0042f784 mov rdx, rcx | rdx = rcx; 0x0042f787 jmp 0x42f76e | | } while (1); | label_14: 0x0042f790 mov edi, esi | edi = esi; 0x0042f792 and edi, 0xf800 | edi &= 0xf800; 0x0042f798 lea rdx, [rcx + 4] | rdx = rcx + 4; 0x0042f79c cmp edi, 0xd800 | | if (edi != 0xd800) { 0x0042f7a2 jne 0x42f760 | goto label_3; | } 0x0042f7a4 cmp rdx, rbx | | if (rdx < rbx) { 0x0042f7a7 jae 0x42f7d0 | 0x0042f7a9 and esi, 0xfc00 | esi &= 0xfc00; 0x0042f7af cmp esi, 0xd800 | | if (esi != 0xd800) { 0x0042f7b5 jne 0x42f7d0 | goto label_15; | } 0x0042f7b7 mov esi, dword [rdx] | esi = *(rdx); 0x0042f7b9 and esi, eax | esi &= eax; 0x0042f7bb cmp esi, 0xdc00 | | if (esi != 0xdc00) { 0x0042f7c1 jne 0x42f7d0 | goto label_15; | } 0x0042f7c3 add rcx, 8 | rcx += 8; 0x0042f7c7 add rbp, 4 | rbp += 4; 0x0042f7cb jmp 0x42f784 | goto label_4; | } | label_15: 0x0042f7d0 inc rbp | rbp++; 0x0042f7d3 jmp 0x42f76e | goto label_5; | label_12: 0x0042f7d5 inc rbp | rbp++; 0x0042f7d8 mov rdi, qword [r12] | rdi = *(r12); 0x0042f7dc mov rax, qword [r12 + 8] | rax = *((r12 + 8)); 0x0042f7e1 sub rax, rdi | rax -= rdi; 0x0042f7e4 cmp rbp, rax | | if (rbp > rax) { 0x0042f7e7 jbe 0x42f7f8 | 0x0042f7e9 mov rdi, r12 | 0x0042f7ec mov rsi, rbp | 0x0042f7ef call 0x433ab0 | std::_1::vector>::resize(unsigned long) (r12, rbp); 0x0042f7f4 mov rdi, qword [r12] | rdi = *(r12); | } 0x0042f7f8 movsx r9d, r13b | r9d = (int32_t) r13b; 0x0042f7fc mov r8, rsp | r8 = rsp; 0x0042f7ff mov rsi, r15 | rsi = r15; 0x0042f802 mov rdx, rbx | rdx = rbx; 0x0042f805 mov rcx, r14 | rcx = r14; 0x0042f808 call 0x433410 | eax = int(anonymousnamespace)::localUtf16ToUtf8,(anonymousnamespace)::NoOpSwapper>(char*,(anonymousnamespace)::NoOpCapacity,wchar_tconst*,(anonymousnamespace)::Utf16::PtrBasedEnd,(anonymousnamespace)::NoOpSwapper,unsigned long*,unsigned long*,char) (); | label_11: 0x0042f80d mov ebx, eax | ebx = eax; 0x0042f80f mov rsi, qword [rsp] | rsi = *(rsp); 0x0042f813 cmp rsi, rbp | 0x0042f816 mov rax, qword [r12 + 8] | rax = *((r12 + 8)); 0x0042f81b sub rax, qword [r12] | rax -= *(r12); 0x0042f81f cmp rax, rsi | | if (rax != rsi) { 0x0042f822 je 0x42f82c | 0x0042f824 mov rdi, r12 | 0x0042f827 call 0x433ab0 | std::_1::vector>::resize(unsigned long) (r12, rsi); | } 0x0042f82c mov eax, ebx | eax = ebx; 0x0042f82e add rsp, 8 | 0x0042f832 pop rbx | 0x0042f833 pop r12 | 0x0042f835 pop r13 | 0x0042f837 pop r14 | 0x0042f839 pop r15 | 0x0042f83b pop rbp | 0x0042f83c ret | return rax; | }