; assembly | /* r2dec pseudo code output */ | /* bdlde_charconvertutf16.t/assume @ 0x42fa30 */ | #include | ; (fcn) method.BloombergLP::bdlde::CharConvertUtf16.utf16ToUtf8_std::__1::vector_char__std::__1::allocator_char_____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_wchar_t_const_unsigned_long_char_BloombergLP::bdlde::ByteOrder::Enum_ (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::utf16ToUtf8(std::__1::vector >*, wchar_t const*, unsigned long*, char, BloombergLP::bdlde::ByteOrder::Enum) */ 0x0042fa30 push rbp | 0x0042fa31 push r15 | 0x0042fa33 push r14 | 0x0042fa35 push r13 | 0x0042fa37 push r12 | 0x0042fa39 push rbx | 0x0042fa3a push rax | 0x0042fa3b mov r12d, ecx | r12d = ecx; 0x0042fa3e mov r14, rdx | r14 = rdx; 0x0042fa41 mov r15, rsi | r15 = rsi; 0x0042fa44 mov r13, rdi | r13 = rdi; 0x0042fa47 mov eax, dword [rsi] | eax = *(rsi); 0x0042fa49 xor ebp, ebp | ebp = 0; 0x0042fa4b test r8d, r8d | | if (r8d == 0) { 0x0042fa4e je 0x42fb23 | goto label_4; | } 0x0042fa54 test eax, eax | | if (eax == 0) { 0x0042fa56 je 0x42faea | goto label_5; | } 0x0042fa5c mov ecx, 0xfc0000 | ecx = 0xfc0000; 0x0042fa61 mov rdx, r15 | rdx = r15; 0x0042fa64 jmp 0x42fa87 | goto label_6; | label_0: 0x0042fa70 cmp edi, 0x800 | 0x0042fa76 sbb rbp, 0 | 0x0042fa7a add rbp, 3 | rbp += 3; | do { | label_2: 0x0042fa7e mov eax, dword [rsi] | eax = *(rsi); 0x0042fa80 mov rdx, rsi | rdx = rsi; 0x0042fa83 test eax, eax | | if (eax == 0) { 0x0042fa85 je 0x42faea | goto label_5; | } | label_6: 0x0042fa87 mov esi, eax | esi = eax; 0x0042fa89 shr esi, 0x18 | esi >>= 0x18; 0x0042fa8c mov edi, eax | edi = eax; 0x0042fa8e shr edi, 8 | edi >>= 8; 0x0042fa91 and edi, 0xff00 | edi &= 0xff00; 0x0042fa97 or edi, esi | edi |= esi; 0x0042fa99 cmp edi, 0x7f | | if (edi > 0x7f) { 0x0042fa9c ja 0x42fab0 | goto label_7; | } 0x0042fa9e add rdx, 4 | rdx += 4; 0x0042faa2 inc rbp | rbp++; | label_1: 0x0042faa5 mov rsi, rdx | rsi = rdx; 0x0042faa8 jmp 0x42fa7e | | } while (1); | label_7: 0x0042fab0 mov ebx, eax | ebx = eax; 0x0042fab2 and ebx, 0xf80000 | ebx &= 0xf80000; 0x0042fab8 lea rsi, [rdx + 4] | rsi = rdx + 4; 0x0042fabc cmp ebx, 0xd80000 | | if (ebx != 0xd80000) { 0x0042fac2 jne 0x42fa70 | goto label_0; | } 0x0042fac4 and eax, 0xfc0000 | eax &= 0xfc0000; 0x0042fac9 cmp eax, 0xd80000 | | if (eax == 0xd80000) { 0x0042face jne 0x42fae5 | 0x0042fad0 mov eax, dword [rsi] | eax = *(rsi); 0x0042fad2 and eax, ecx | eax &= ecx; 0x0042fad4 cmp eax, 0xdc0000 | | if (eax != 0xdc0000) { 0x0042fad9 jne 0x42fae5 | goto label_8; | } 0x0042fadb add rdx, 8 | rdx += 8; 0x0042fadf add rbp, 4 | rbp += 4; 0x0042fae3 jmp 0x42faa5 | goto label_1; | } | label_8: 0x0042fae5 inc rbp | rbp++; 0x0042fae8 jmp 0x42fa7e | goto label_2; | label_5: 0x0042faea inc rbp | rbp++; 0x0042faed mov rdi, qword [r13] | rdi = *(r13); 0x0042faf1 mov rax, qword [r13 + 8] | rax = *((r13 + 8)); 0x0042faf5 sub rax, rdi | rax -= rdi; 0x0042faf8 cmp rbp, rax | | if (rbp > rax) { 0x0042fafb jbe 0x42fb0c | 0x0042fafd mov rdi, r13 | 0x0042fb00 mov rsi, rbp | 0x0042fb03 call 0x433ab0 | std::_1::vector>::resize(unsigned long) (r13, rbp); 0x0042fb08 mov rdi, qword [r13] | rdi = *(r13); | } 0x0042fb0c movsx r8d, r12b | r8d = (int32_t) r12b; 0x0042fb10 mov rcx, rsp | rcx = rsp; 0x0042fb13 mov rsi, r15 | rsi = r15; 0x0042fb16 mov rdx, r14 | rdx = r14; 0x0042fb19 call 0x433900 | eax = int(anonymousnamespace)::localUtf16ToUtf8,(anonymousnamespace)::Swapper>(char*,(anonymousnamespace)::NoOpCapacity,wchar_tconst*,(anonymousnamespace)::Utf16::ZeroBasedEnd,(anonymousnamespace)::Swapper,unsigned long*,unsigned long*,char) (); 0x0042fb1e jmp 0x42fbee | goto label_9; | label_4: 0x0042fb23 test eax, eax | | if (eax == 0) { 0x0042fb25 je 0x42fbba | goto label_10; | } 0x0042fb2b mov ecx, 0xfc00 | ecx = 0xfc00; 0x0042fb30 mov rdx, r15 | rdx = r15; 0x0042fb33 jmp 0x42fb56 | | while (edi != 0xd800) { 0x0042fb40 cmp eax, 0x800 | 0x0042fb45 sbb rbp, 0 | 0x0042fb49 add rbp, 3 | rbp += 3; | label_3: 0x0042fb4d mov eax, dword [rsi] | eax = *(rsi); 0x0042fb4f mov rdx, rsi | rdx = rsi; 0x0042fb52 test eax, eax | | if (eax == 0) { 0x0042fb54 je 0x42fbba | goto label_10; | } 0x0042fb56 cmp eax, 0x7f | | if (eax <= 0x7f) { 0x0042fb59 ja 0x42fb70 | 0x0042fb5b add rdx, 4 | rdx += 4; 0x0042fb5f inc rbp | rbp++; 0x0042fb62 jmp 0x42fbb0 | goto label_11; | } 0x0042fb70 mov edi, eax | edi = eax; 0x0042fb72 and edi, 0xf800 | edi &= 0xf800; 0x0042fb78 lea rsi, [rdx + 4] | rsi = rdx + 4; 0x0042fb7c cmp edi, 0xd800 | 0x0042fb82 jne 0x42fb40 | | } 0x0042fb84 and eax, 0xfc00 | eax &= 0xfc00; 0x0042fb89 cmp eax, 0xd800 | | if (eax == 0xd800) { 0x0042fb8e jne 0x42fbb5 | 0x0042fb90 mov eax, dword [rsi] | eax = *(rsi); 0x0042fb92 and eax, ecx | eax &= ecx; 0x0042fb94 cmp eax, 0xdc00 | | if (eax != 0xdc00) { 0x0042fb99 jne 0x42fbb5 | goto label_12; | } 0x0042fb9b add rdx, 8 | rdx += 8; 0x0042fb9f add rbp, 4 | rbp += 4; 0x0042fba3 nop word cs:[rax + rax] | 0x0042fbad nop dword [rax] | | label_11: 0x0042fbb0 mov rsi, rdx | rsi = rdx; 0x0042fbb3 jmp 0x42fb4d | goto label_3; | } | label_12: 0x0042fbb5 inc rbp | rbp++; 0x0042fbb8 jmp 0x42fb4d | goto label_3; | label_10: 0x0042fbba inc rbp | rbp++; 0x0042fbbd mov rdi, qword [r13] | rdi = *(r13); 0x0042fbc1 mov rax, qword [r13 + 8] | rax = *((r13 + 8)); 0x0042fbc5 sub rax, rdi | rax -= rdi; 0x0042fbc8 cmp rbp, rax | | if (rbp > rax) { 0x0042fbcb jbe 0x42fbdc | 0x0042fbcd mov rdi, r13 | 0x0042fbd0 mov rsi, rbp | 0x0042fbd3 call 0x433ab0 | std::_1::vector>::resize(unsigned long) (r13, rbp); 0x0042fbd8 mov rdi, qword [r13] | rdi = *(r13); | } 0x0042fbdc movsx r8d, r12b | r8d = (int32_t) r12b; 0x0042fbe0 mov rcx, rsp | rcx = rsp; 0x0042fbe3 mov rsi, r15 | rsi = r15; 0x0042fbe6 mov rdx, r14 | rdx = r14; 0x0042fbe9 call 0x433750 | eax = int(anonymousnamespace)::localUtf16ToUtf8,(anonymousnamespace)::NoOpSwapper>(char*,(anonymousnamespace)::NoOpCapacity,wchar_tconst*,(anonymousnamespace)::Utf16::ZeroBasedEnd,(anonymousnamespace)::NoOpSwapper,unsigned long*,unsigned long*,char) (); | label_9: 0x0042fbee mov ebx, eax | ebx = eax; 0x0042fbf0 mov rsi, qword [rsp] | rsi = *(rsp); 0x0042fbf4 cmp rsi, rbp | 0x0042fbf7 mov rax, qword [r13 + 8] | rax = *((r13 + 8)); 0x0042fbfb sub rax, qword [r13] | rax -= *(r13); 0x0042fbff cmp rax, rsi | | if (rax != rsi) { 0x0042fc02 je 0x42fc0c | 0x0042fc04 mov rdi, r13 | 0x0042fc07 call 0x433ab0 | std::_1::vector>::resize(unsigned long) (r13, rsi); | } 0x0042fc0c mov eax, ebx | eax = ebx; 0x0042fc0e add rsp, 8 | 0x0042fc12 pop rbx | 0x0042fc13 pop r12 | 0x0042fc15 pop r13 | 0x0042fc17 pop r14 | 0x0042fc19 pop r15 | 0x0042fc1b pop rbp | 0x0042fc1c ret | return rax; | }