; assembly | /* r2dec pseudo code output */ | /* bdlde_charconvertutf16.t/assume @ 0x42f440 */ | #include | ; (fcn) method.BloombergLP::bdlde::CharConvertUtf16.utf16ToUtf8_bsl::vector_char__bsl::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_bsl::vector_char_bsl::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, char * arg2, char * arg1) { | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlde::CharConvertUtf16::utf16ToUtf8(bsl::vector >*, std::__1::basic_string_view > const&, unsigned long*, char, BloombergLP::bdlde::ByteOrder::Enum) */ 0x0042f440 push rbp | 0x0042f441 push r15 | 0x0042f443 push r14 | 0x0042f445 push r13 | 0x0042f447 push r12 | 0x0042f449 push rbx | 0x0042f44a push rax | 0x0042f44b mov r13d, ecx | r13d = ecx; 0x0042f44e mov r14, rdx | r14 = rdx; 0x0042f451 mov r12, rdi | r12 = rdi; 0x0042f454 mov r15, qword [rsi] | r15 = *(rsi); 0x0042f457 mov rax, qword [rsi + 8] | rax = *((rsi + 8)); 0x0042f45b lea rbx, [r15 + rax*4] | rbx = r15 + rax*4; 0x0042f45f xor ebp, ebp | ebp = 0; 0x0042f461 test r8d, r8d | | if (r8d == 0) { 0x0042f464 je 0x42f542 | goto label_6; | } 0x0042f46a test rax, rax | | if (rax <= 0) { 0x0042f46d jle 0x42f505 | goto label_7; | } 0x0042f473 mov r8d, 0xfc0000 | r8d = 0xfc0000; 0x0042f479 mov rcx, r15 | rcx = r15; 0x0042f47c jmp 0x42f496 | goto label_8; | label_0: 0x0042f480 cmp edi, 0x800 | 0x0042f486 sbb rbp, 0 | 0x0042f48a add rbp, 3 | rbp += 3; | do { | label_2: 0x0042f48e mov rcx, rdx | rcx = rdx; 0x0042f491 cmp rdx, rbx | | if (rdx >= rbx) { 0x0042f494 jae 0x42f505 | goto label_7; | } | label_8: 0x0042f496 mov esi, dword [rcx] | esi = *(rcx); 0x0042f498 mov edx, esi | edx = *(rcx); 0x0042f49a shr edx, 0x18 | edx >>= 0x18; 0x0042f49d mov edi, esi | edi = esi; 0x0042f49f shr edi, 8 | edi >>= 8; 0x0042f4a2 and edi, 0xff00 | edi &= 0xff00; 0x0042f4a8 or edi, edx | edi |= edx; 0x0042f4aa cmp edi, 0x7f | | if (edi > 0x7f) { 0x0042f4ad ja 0x42f4c0 | goto label_9; | } 0x0042f4af add rcx, 4 | rcx += 4; 0x0042f4b3 inc rbp | rbp++; | label_1: 0x0042f4b6 mov rdx, rcx | rdx = rcx; 0x0042f4b9 jmp 0x42f48e | | } while (1); | label_9: 0x0042f4c0 mov eax, esi | eax = esi; 0x0042f4c2 and eax, 0xf80000 | eax &= 0xf80000; 0x0042f4c7 lea rdx, [rcx + 4] | rdx = rcx + 4; 0x0042f4cb cmp eax, 0xd80000 | | if (eax != 0xd80000) { 0x0042f4d0 jne 0x42f480 | goto label_0; | } 0x0042f4d2 cmp rdx, rbx | | if (rdx < rbx) { 0x0042f4d5 jae 0x42f500 | 0x0042f4d7 and esi, 0xfc0000 | esi &= 0xfc0000; 0x0042f4dd cmp esi, 0xd80000 | | if (esi != 0xd80000) { 0x0042f4e3 jne 0x42f500 | goto label_10; | } 0x0042f4e5 mov eax, dword [rdx] | eax = *(rdx); 0x0042f4e7 and eax, r8d | eax &= r8d; 0x0042f4ea cmp eax, 0xdc0000 | | if (eax != 0xdc0000) { 0x0042f4ef jne 0x42f500 | goto label_10; | } 0x0042f4f1 add rcx, 8 | rcx += 8; 0x0042f4f5 add rbp, 4 | rbp += 4; 0x0042f4f9 jmp 0x42f4b6 | goto label_1; | } | label_10: 0x0042f500 inc rbp | rbp++; 0x0042f503 jmp 0x42f48e | goto label_2; | label_7: 0x0042f505 inc rbp | rbp++; 0x0042f508 mov rdi, qword [r12] | rdi = *(r12); 0x0042f50c mov rax, qword [r12 + 8] | rax = *((r12 + 8)); 0x0042f511 sub rax, rdi | rax -= rdi; 0x0042f514 cmp rbp, rax | | if (rbp > rax) { 0x0042f517 jbe 0x42f528 | 0x0042f519 mov rdi, r12 | 0x0042f51c mov rsi, rbp | 0x0042f51f call 0x443080 | bsl::vector>::resize(unsigned long) (r12, rbp); 0x0042f524 mov rdi, qword [r12] | rdi = *(r12); | } 0x0042f528 movsx r9d, r13b | r9d = (int32_t) r13b; 0x0042f52c mov r8, rsp | r8 = rsp; 0x0042f52f mov rsi, r15 | rsi = r15; 0x0042f532 mov rdx, rbx | rdx = rbx; 0x0042f535 mov rcx, r14 | rcx = r14; 0x0042f538 call 0x4335a0 | rax = int(anonymousnamespace)::localUtf16ToUtf8,(anonymousnamespace)::Swapper>(char*,(anonymousnamespace)::NoOpCapacity,wchar_tconst*,(anonymousnamespace)::Utf16::PtrBasedEnd,(anonymousnamespace)::Swapper,unsigned long*,unsigned long*,char) (); 0x0042f53d jmp 0x42f60d | goto label_11; | label_6: 0x0042f542 test rax, rax | | if (rax <= 0) { 0x0042f545 jle 0x42f5d5 | goto label_12; | } 0x0042f54b mov eax, 0xfc00 | eax = 0xfc00; 0x0042f550 mov rcx, r15 | rcx = r15; 0x0042f553 jmp 0x42f576 | goto label_13; | label_3: 0x0042f560 cmp esi, 0x800 | 0x0042f566 sbb rbp, 0 | 0x0042f56a add rbp, 3 | rbp += 3; | do { | label_5: 0x0042f56e mov rcx, rdx | rcx = rdx; 0x0042f571 cmp rdx, rbx | | if (rdx >= rbx) { 0x0042f574 jae 0x42f5d5 | goto label_12; | } | label_13: 0x0042f576 mov esi, dword [rcx] | esi = *(rcx); 0x0042f578 cmp esi, 0x7f | | if (esi > 0x7f) { 0x0042f57b ja 0x42f590 | goto label_14; | } 0x0042f57d add rcx, 4 | rcx += 4; 0x0042f581 inc rbp | rbp++; | label_4: 0x0042f584 mov rdx, rcx | rdx = rcx; 0x0042f587 jmp 0x42f56e | | } while (1); | label_14: 0x0042f590 mov edi, esi | edi = esi; 0x0042f592 and edi, 0xf800 | edi &= 0xf800; 0x0042f598 lea rdx, [rcx + 4] | rdx = rcx + 4; 0x0042f59c cmp edi, 0xd800 | | if (edi != 0xd800) { 0x0042f5a2 jne 0x42f560 | goto label_3; | } 0x0042f5a4 cmp rdx, rbx | | if (rdx < rbx) { 0x0042f5a7 jae 0x42f5d0 | 0x0042f5a9 and esi, 0xfc00 | esi &= 0xfc00; 0x0042f5af cmp esi, 0xd800 | | if (esi != 0xd800) { 0x0042f5b5 jne 0x42f5d0 | goto label_15; | } 0x0042f5b7 mov esi, dword [rdx] | esi = *(rdx); 0x0042f5b9 and esi, eax | esi &= eax; 0x0042f5bb cmp esi, 0xdc00 | | if (esi != 0xdc00) { 0x0042f5c1 jne 0x42f5d0 | goto label_15; | } 0x0042f5c3 add rcx, 8 | rcx += 8; 0x0042f5c7 add rbp, 4 | rbp += 4; 0x0042f5cb jmp 0x42f584 | goto label_4; | } | label_15: 0x0042f5d0 inc rbp | rbp++; 0x0042f5d3 jmp 0x42f56e | goto label_5; | label_12: 0x0042f5d5 inc rbp | rbp++; 0x0042f5d8 mov rdi, qword [r12] | rdi = *(r12); 0x0042f5dc mov rax, qword [r12 + 8] | rax = *((r12 + 8)); 0x0042f5e1 sub rax, rdi | rax -= rdi; 0x0042f5e4 cmp rbp, rax | | if (rbp > rax) { 0x0042f5e7 jbe 0x42f5f8 | 0x0042f5e9 mov rdi, r12 | 0x0042f5ec mov rsi, rbp | 0x0042f5ef call 0x443080 | bsl::vector>::resize(unsigned long) (r12, rbp); 0x0042f5f4 mov rdi, qword [r12] | rdi = *(r12); | } 0x0042f5f8 movsx r9d, r13b | r9d = (int32_t) r13b; 0x0042f5fc mov r8, rsp | r8 = rsp; 0x0042f5ff mov rsi, r15 | rsi = r15; 0x0042f602 mov rdx, rbx | rdx = rbx; 0x0042f605 mov rcx, r14 | rcx = r14; 0x0042f608 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: 0x0042f60d mov ebx, eax | ebx = eax; 0x0042f60f mov rsi, qword [rsp] | rsi = *(rsp); 0x0042f613 cmp rsi, rbp | 0x0042f616 mov rax, qword [r12 + 8] | rax = *((r12 + 8)); 0x0042f61b sub rax, qword [r12] | rax -= *(r12); 0x0042f61f cmp rax, rsi | | if (rax != rsi) { 0x0042f622 je 0x42f62c | 0x0042f624 mov rdi, r12 | 0x0042f627 call 0x443080 | bsl::vector>::resize(unsigned long) (r12, rsi); | } 0x0042f62c mov eax, ebx | eax = ebx; 0x0042f62e add rsp, 8 | 0x0042f632 pop rbx | 0x0042f633 pop r12 | 0x0042f635 pop r13 | 0x0042f637 pop r14 | 0x0042f639 pop r15 | 0x0042f63b pop rbp | 0x0042f63c ret | return rax; | }