; assembly | /* r2dec pseudo code output */ | /* bdlde_charconvertutf16.t/none @ 0x42f620 */ | #include | ; (fcn) method.BloombergLP::bdlde::CharConvertUtf16.utf16ToUtf8_bsl::vector_char__bsl::allocator_char_____wchar_t_const__unsigned_long__char__BloombergLP::bdlde::ByteOrder::Enum_ () | int64_t method_BloombergLP::bdlde::CharConvertUtf16_utf16ToUtf8_bsl::vector_char_bsl::allocator_char_wchar_t_const_unsigned_long_char_BloombergLP::bdlde::ByteOrder::Enum_ (int64_t arg5, int64_t arg4, uint32_t arg3, int64_t arg2, char * arg1) { | int64_t var_8h; | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlde::CharConvertUtf16::utf16ToUtf8(bsl::vector >*, wchar_t const*, unsigned long*, char, BloombergLP::bdlde::ByteOrder::Enum) */ 0x0042f620 push rbp | 0x0042f621 push r15 | 0x0042f623 push r14 | 0x0042f625 push r12 | 0x0042f627 push rbx | 0x0042f628 sub rsp, 0x10 | 0x0042f62c mov r12d, ecx | r12d = ecx; 0x0042f62f mov r14, rdx | r14 = rdx; 0x0042f632 mov r15, rsi | r15 = rsi; 0x0042f635 mov rbx, rdi | rbx = rdi; 0x0042f638 mov ebp, dword [rsi] | ebp = *(rsi); 0x0042f63a xor esi, esi | esi = 0; 0x0042f63c test r8d, r8d | | if (r8d == 0) { 0x0042f63f je 0x42f713 | goto label_4; | } 0x0042f645 test ebp, ebp | | if (ebp == 0) { 0x0042f647 je 0x42f6dd | goto label_5; | } 0x0042f64d mov r8d, 0xfc0000 | r8d = 0xfc0000; 0x0042f653 mov rdx, r15 | rdx = r15; 0x0042f656 jmp 0x42f676 | goto label_6; | label_0: 0x0042f660 cmp eax, 0x800 | 0x0042f665 sbb rsi, 0 | 0x0042f669 add rsi, 3 | rsi += 3; | do { | label_2: 0x0042f66d mov ebp, dword [rdi] | ebp = *(rdi); 0x0042f66f mov rdx, rdi | rdx = rdi; 0x0042f672 test ebp, ebp | | if (ebp == 0) { 0x0042f674 je 0x42f6dd | goto label_5; | } | label_6: 0x0042f676 mov edi, ebp | edi = ebp; 0x0042f678 shr edi, 0x18 | edi >>= 0x18; 0x0042f67b mov eax, ebp | eax = ebp; 0x0042f67d shr eax, 8 | eax >>= 8; 0x0042f680 and eax, 0xff00 | eax &= 0xff00; 0x0042f685 or eax, edi | eax |= edi; 0x0042f687 cmp eax, 0x7f | | if (eax > 0x7f) { 0x0042f68a ja 0x42f6a0 | goto label_7; | } 0x0042f68c add rdx, 4 | rdx += 4; 0x0042f690 inc rsi | rsi++; | label_1: 0x0042f693 mov rdi, rdx | rdi = rdx; 0x0042f696 jmp 0x42f66d | | } while (1); | label_7: 0x0042f6a0 mov ecx, ebp | ecx = ebp; 0x0042f6a2 and ecx, 0xf80000 | ecx &= 0xf80000; 0x0042f6a8 lea rdi, [rdx + 4] | rdi = rdx + 4; 0x0042f6ac cmp ecx, 0xd80000 | | if (ecx != 0xd80000) { 0x0042f6b2 jne 0x42f660 | goto label_0; | } 0x0042f6b4 and ebp, 0xfc0000 | ebp &= 0xfc0000; 0x0042f6ba cmp ebp, 0xd80000 | | if (ebp == 0xd80000) { 0x0042f6c0 jne 0x42f6d8 | 0x0042f6c2 mov eax, dword [rdi] | eax = *(rdi); 0x0042f6c4 and eax, r8d | eax &= r8d; 0x0042f6c7 cmp eax, 0xdc0000 | | if (eax != 0xdc0000) { 0x0042f6cc jne 0x42f6d8 | goto label_8; | } 0x0042f6ce add rdx, 8 | rdx += 8; 0x0042f6d2 add rsi, 4 | rsi += 4; 0x0042f6d6 jmp 0x42f693 | goto label_1; | } | label_8: 0x0042f6d8 inc rsi | rsi++; 0x0042f6db jmp 0x42f66d | goto label_2; | label_5: 0x0042f6dd inc rsi | rsi++; 0x0042f6e0 mov rdi, qword [rbx] | rdi = *(rbx); 0x0042f6e3 mov rax, qword [rbx + 8] | rax = *((rbx + 8)); 0x0042f6e7 sub rax, rdi | rax -= rdi; 0x0042f6ea cmp rsi, rax | | if (rsi > rax) { 0x0042f6ed jbe 0x42f6fa | 0x0042f6ef mov rdi, rbx | 0x0042f6f2 call 0x442e60 | bsl::vector>::resize(unsigned long) (rbx, rsi); 0x0042f6f7 mov rdi, qword [rbx] | rdi = *(rbx); | } 0x0042f6fa movsx r8d, r12b | r8d = (int32_t) r12b; 0x0042f6fe lea rcx, [rsp + 8] | rcx = rsp + 8; 0x0042f703 mov rsi, r15 | rsi = r15; 0x0042f706 mov rdx, r14 | rdx = r14; 0x0042f709 call 0x4336e0 | int(anonymousnamespace)::localUtf16ToUtf8,(anonymousnamespace)::Swapper>(char*,(anonymousnamespace)::NoOpCapacity,wchar_tconst*,(anonymousnamespace)::Utf16::ZeroBasedEnd,(anonymousnamespace)::Swapper,unsigned long*,unsigned long*,char) (); 0x0042f70e jmp 0x42f7db | goto label_9; | label_4: 0x0042f713 test ebp, ebp | | if (ebp == 0) { 0x0042f715 je 0x42f7aa | goto label_10; | } 0x0042f71b mov ecx, 0xfc00 | ecx = 0xfc00; 0x0042f720 mov rdx, r15 | rdx = r15; 0x0042f723 jmp 0x42f747 | | while (eax != 0xd800) { 0x0042f730 cmp ebp, 0x800 | 0x0042f736 sbb rsi, 0 | 0x0042f73a add rsi, 3 | rsi += 3; | label_3: 0x0042f73e mov ebp, dword [rdi] | ebp = *(rdi); 0x0042f740 mov rdx, rdi | rdx = rdi; 0x0042f743 test ebp, ebp | | if (ebp == 0) { 0x0042f745 je 0x42f7aa | goto label_10; | } 0x0042f747 cmp ebp, 0x7f | | if (ebp <= 0x7f) { 0x0042f74a ja 0x42f760 | 0x0042f74c add rdx, 4 | rdx += 4; 0x0042f750 inc rsi | rsi++; 0x0042f753 jmp 0x42f7a0 | goto label_11; | } 0x0042f760 mov eax, ebp | eax = ebp; 0x0042f762 and eax, 0xf800 | eax &= 0xf800; 0x0042f767 lea rdi, [rdx + 4] | rdi = rdx + 4; 0x0042f76b cmp eax, 0xd800 | 0x0042f770 jne 0x42f730 | | } 0x0042f772 and ebp, 0xfc00 | ebp &= 0xfc00; 0x0042f778 cmp ebp, 0xd800 | | if (ebp == 0xd800) { 0x0042f77e jne 0x42f7a5 | 0x0042f780 mov eax, dword [rdi] | eax = *(rdi); 0x0042f782 and eax, ecx | eax &= ecx; 0x0042f784 cmp eax, 0xdc00 | | if (eax != 0xdc00) { 0x0042f789 jne 0x42f7a5 | goto label_12; | } 0x0042f78b add rdx, 8 | rdx += 8; 0x0042f78f add rsi, 4 | rsi += 4; 0x0042f793 nop word cs:[rax + rax] | 0x0042f79d nop dword [rax] | | label_11: 0x0042f7a0 mov rdi, rdx | rdi = rdx; 0x0042f7a3 jmp 0x42f73e | goto label_3; | } | label_12: 0x0042f7a5 inc rsi | rsi++; 0x0042f7a8 jmp 0x42f73e | goto label_3; | label_10: 0x0042f7aa inc rsi | rsi++; 0x0042f7ad mov rdi, qword [rbx] | rdi = *(rbx); 0x0042f7b0 mov rax, qword [rbx + 8] | rax = *((rbx + 8)); 0x0042f7b4 sub rax, rdi | rax -= rdi; 0x0042f7b7 cmp rsi, rax | | if (rsi > rax) { 0x0042f7ba jbe 0x42f7c7 | 0x0042f7bc mov rdi, rbx | 0x0042f7bf call 0x442e60 | bsl::vector>::resize(unsigned long) (rbx, rsi); 0x0042f7c4 mov rdi, qword [rbx] | rdi = *(rbx); | } 0x0042f7c7 movsx r8d, r12b | r8d = (int32_t) r12b; 0x0042f7cb lea rcx, [rsp + 8] | rcx = rsp + 8; 0x0042f7d0 mov rsi, r15 | rsi = r15; 0x0042f7d3 mov rdx, r14 | rdx = r14; 0x0042f7d6 call 0x433530 | eax = int(anonymousnamespace)::localUtf16ToUtf8,(anonymousnamespace)::NoOpSwapper>(char*,(anonymousnamespace)::NoOpCapacity,wchar_tconst*,(anonymousnamespace)::Utf16::ZeroBasedEnd,(anonymousnamespace)::NoOpSwapper,unsigned long*,unsigned long*,char) (); | label_9: 0x0042f7db mov ebp, eax | 0x0042f7dd mov rsi, qword [rsp + 8] | rsi = *((rsp + 8)); 0x0042f7e2 mov rax, qword [rbx + 8] | rax = *((rbx + 8)); 0x0042f7e6 sub rax, qword [rbx] | rax -= *(rbx); 0x0042f7e9 cmp rax, rsi | | if (rax != rsi) { 0x0042f7ec je 0x42f7f6 | 0x0042f7ee mov rdi, rbx | 0x0042f7f1 call 0x442e60 | bsl::vector>::resize(unsigned long) (rbx, rsi); | } 0x0042f7f6 mov eax, ebp | eax = ebp; 0x0042f7f8 add rsp, 0x10 | 0x0042f7fc pop rbx | 0x0042f7fd pop r12 | 0x0042f7ff pop r14 | 0x0042f801 pop r15 | 0x0042f803 pop rbp | 0x0042f804 ret | return rax; | }