; assembly | /* r2dec pseudo code output */ | /* bdlde_charconvertutf16.t/none @ 0x42f430 */ | #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) */ 0x0042f430 push rbp | 0x0042f431 push r15 | 0x0042f433 push r14 | 0x0042f435 push r13 | 0x0042f437 push r12 | 0x0042f439 push rbx | 0x0042f43a push rax | 0x0042f43b mov r13d, ecx | r13d = ecx; 0x0042f43e mov r14, rdx | r14 = rdx; 0x0042f441 mov r12, rdi | r12 = rdi; 0x0042f444 mov r15, qword [rsi] | r15 = *(rsi); 0x0042f447 mov rax, qword [rsi + 8] | rax = *((rsi + 8)); 0x0042f44b lea rbx, [r15 + rax*4] | rbx = r15 + rax*4; 0x0042f44f xor esi, esi | esi = 0; 0x0042f451 test r8d, r8d | | if (r8d == 0) { 0x0042f454 je 0x42f52a | goto label_6; | } 0x0042f45a test rax, rax | | if (rax <= 0) { 0x0042f45d jle 0x42f4f0 | goto label_7; | } 0x0042f463 mov r8d, 0xfc0000 | r8d = 0xfc0000; 0x0042f469 mov rcx, r15 | rcx = r15; 0x0042f46c jmp 0x42f486 | goto label_8; | label_0: 0x0042f470 cmp edi, 0x800 | 0x0042f476 sbb rsi, 0 | 0x0042f47a add rsi, 3 | rsi += 3; | do { | label_2: 0x0042f47e mov rcx, rdx | rcx = rdx; 0x0042f481 cmp rdx, rbx | | if (rdx >= rbx) { 0x0042f484 jae 0x42f4f0 | goto label_7; | } | label_8: 0x0042f486 mov ebp, dword [rcx] | ebp = *(rcx); 0x0042f488 mov edx, ebp | edx = *(rcx); 0x0042f48a shr edx, 0x18 | edx >>= 0x18; 0x0042f48d mov edi, ebp | edi = ebp; 0x0042f48f shr edi, 8 | edi >>= 8; 0x0042f492 and edi, 0xff00 | edi &= 0xff00; 0x0042f498 or edi, edx | edi |= edx; 0x0042f49a cmp edi, 0x7f | | if (edi > 0x7f) { 0x0042f49d ja 0x42f4b0 | goto label_9; | } 0x0042f49f add rcx, 4 | rcx += 4; 0x0042f4a3 inc rsi | rsi++; | label_1: 0x0042f4a6 mov rdx, rcx | rdx = rcx; 0x0042f4a9 jmp 0x42f47e | | } while (1); | label_9: 0x0042f4b0 mov eax, ebp | eax = ebp; 0x0042f4b2 and eax, 0xf80000 | eax &= 0xf80000; 0x0042f4b7 lea rdx, [rcx + 4] | rdx = rcx + 4; 0x0042f4bb cmp eax, 0xd80000 | | if (eax != 0xd80000) { 0x0042f4c0 jne 0x42f470 | goto label_0; | } 0x0042f4c2 cmp rdx, rbx | | if (rdx < rbx) { 0x0042f4c5 jae 0x42f4eb | 0x0042f4c7 and ebp, 0xfc0000 | ebp &= 0xfc0000; 0x0042f4cd cmp ebp, 0xd80000 | | if (ebp != 0xd80000) { 0x0042f4d3 jne 0x42f4eb | goto label_10; | } 0x0042f4d5 mov eax, dword [rdx] | eax = *(rdx); 0x0042f4d7 and eax, r8d | eax &= r8d; 0x0042f4da cmp eax, 0xdc0000 | | if (eax != 0xdc0000) { 0x0042f4df jne 0x42f4eb | goto label_10; | } 0x0042f4e1 add rcx, 8 | rcx += 8; 0x0042f4e5 add rsi, 4 | rsi += 4; 0x0042f4e9 jmp 0x42f4a6 | goto label_1; | } | label_10: 0x0042f4eb inc rsi | rsi++; 0x0042f4ee jmp 0x42f47e | goto label_2; | label_7: 0x0042f4f0 inc rsi | rsi++; 0x0042f4f3 mov rdi, qword [r12] | rdi = *(r12); 0x0042f4f7 mov rax, qword [r12 + 8] | rax = *((r12 + 8)); 0x0042f4fc sub rax, rdi | rax -= rdi; 0x0042f4ff cmp rsi, rax | | if (rsi > rax) { 0x0042f502 jbe 0x42f510 | 0x0042f504 mov rdi, r12 | 0x0042f507 call 0x433890 | std::_1::vector>::resize(unsigned long) (r12, rsi); 0x0042f50c mov rdi, qword [r12] | rdi = *(r12); | } 0x0042f510 movsx r9d, r13b | r9d = (int32_t) r13b; 0x0042f514 mov r8, rsp | r8 = rsp; 0x0042f517 mov rsi, r15 | rsi = r15; 0x0042f51a mov rdx, rbx | rdx = rbx; 0x0042f51d mov rcx, r14 | rcx = r14; 0x0042f520 call 0x433380 | rax = int(anonymousnamespace)::localUtf16ToUtf8,(anonymousnamespace)::Swapper>(char*,(anonymousnamespace)::NoOpCapacity,wchar_tconst*,(anonymousnamespace)::Utf16::PtrBasedEnd,(anonymousnamespace)::Swapper,unsigned long*,unsigned long*,char) (); 0x0042f525 jmp 0x42f5e7 | goto label_11; | label_6: 0x0042f52a test rax, rax | | if (rax <= 0) { 0x0042f52d jle 0x42f5b2 | goto label_12; | } 0x0042f533 mov eax, 0xfc00 | eax = 0xfc00; 0x0042f538 mov rcx, r15 | rcx = r15; 0x0042f53b jmp 0x42f556 | goto label_13; | label_3: 0x0042f540 cmp edi, 0x800 | 0x0042f546 sbb rsi, 0 | 0x0042f54a add rsi, 3 | rsi += 3; | do { | label_5: 0x0042f54e mov rcx, rdx | rcx = rdx; 0x0042f551 cmp rdx, rbx | | if (rdx >= rbx) { 0x0042f554 jae 0x42f5b2 | goto label_12; | } | label_13: 0x0042f556 mov edi, dword [rcx] | edi = *(rcx); 0x0042f558 cmp edi, 0x7f | | if (edi > 0x7f) { 0x0042f55b ja 0x42f570 | goto label_14; | } 0x0042f55d add rcx, 4 | rcx += 4; 0x0042f561 inc rsi | rsi++; | label_4: 0x0042f564 mov rdx, rcx | rdx = rcx; 0x0042f567 jmp 0x42f54e | | } while (1); | label_14: 0x0042f570 mov ebp, edi | 0x0042f572 and ebp, 0xf800 | ebp &= 0xf800; 0x0042f578 lea rdx, [rcx + 4] | rdx = rcx + 4; 0x0042f57c cmp ebp, 0xd800 | | if (ebp != 0xd800) { 0x0042f582 jne 0x42f540 | goto label_3; | } 0x0042f584 cmp rdx, rbx | | if (rdx < rbx) { 0x0042f587 jae 0x42f5ad | 0x0042f589 and edi, 0xfc00 | edi &= 0xfc00; 0x0042f58f cmp edi, 0xd800 | | if (edi != 0xd800) { 0x0042f595 jne 0x42f5ad | goto label_15; | } 0x0042f597 mov edi, dword [rdx] | edi = *(rdx); 0x0042f599 and edi, eax | edi &= eax; 0x0042f59b cmp edi, 0xdc00 | | if (edi != 0xdc00) { 0x0042f5a1 jne 0x42f5ad | goto label_15; | } 0x0042f5a3 add rcx, 8 | rcx += 8; 0x0042f5a7 add rsi, 4 | rsi += 4; 0x0042f5ab jmp 0x42f564 | goto label_4; | } | label_15: 0x0042f5ad inc rsi | rsi++; 0x0042f5b0 jmp 0x42f54e | goto label_5; | label_12: 0x0042f5b2 inc rsi | rsi++; 0x0042f5b5 mov rdi, qword [r12] | rdi = *(r12); 0x0042f5b9 mov rax, qword [r12 + 8] | rax = *((r12 + 8)); 0x0042f5be sub rax, rdi | rax -= rdi; 0x0042f5c1 cmp rsi, rax | | if (rsi > rax) { 0x0042f5c4 jbe 0x42f5d2 | 0x0042f5c6 mov rdi, r12 | 0x0042f5c9 call 0x433890 | std::_1::vector>::resize(unsigned long) (r12, rsi); 0x0042f5ce mov rdi, qword [r12] | rdi = *(r12); | } 0x0042f5d2 movsx r9d, r13b | r9d = (int32_t) r13b; 0x0042f5d6 mov r8, rsp | r8 = rsp; 0x0042f5d9 mov rsi, r15 | rsi = r15; 0x0042f5dc mov rdx, rbx | rdx = rbx; 0x0042f5df mov rcx, r14 | rcx = r14; 0x0042f5e2 call 0x4331f0 | eax = int(anonymousnamespace)::localUtf16ToUtf8,(anonymousnamespace)::NoOpSwapper>(char*,(anonymousnamespace)::NoOpCapacity,wchar_tconst*,(anonymousnamespace)::Utf16::PtrBasedEnd,(anonymousnamespace)::NoOpSwapper,unsigned long*,unsigned long*,char) (); | label_11: 0x0042f5e7 mov ebx, eax | ebx = eax; 0x0042f5e9 mov rsi, qword [rsp] | rsi = *(rsp); 0x0042f5ed mov rax, qword [r12 + 8] | rax = *((r12 + 8)); 0x0042f5f2 sub rax, qword [r12] | rax -= *(r12); 0x0042f5f6 cmp rax, rsi | | if (rax != rsi) { 0x0042f5f9 je 0x42f603 | 0x0042f5fb mov rdi, r12 | 0x0042f5fe call 0x433890 | std::_1::vector>::resize(unsigned long) (r12, rsi); | } 0x0042f603 mov eax, ebx | eax = ebx; 0x0042f605 add rsp, 8 | 0x0042f609 pop rbx | 0x0042f60a pop r12 | 0x0042f60c pop r13 | 0x0042f60e pop r14 | 0x0042f610 pop r15 | 0x0042f612 pop rbp | 0x0042f613 ret | return rax; | }