; assembly | /* r2dec pseudo code output */ | /* baljsn_datumutil.t/assume @ 0x44f690 */ | #include | | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \ | ((n & 0x0000ff00) << 8) | \ | ((n & 0x00ff0000) >> 8) | \ | ((n & 0xff000000) >> 24))) | ; (fcn) method.BloombergLP::bdlde::CharConvertUtf32.utf32ToUtf8_std::__1::basic_string_char__std::__1::char_traits_char___std::__1::allocator_char_____unsigned_int_const__unsigned_long__unsigned_long__unsigned_char__BloombergLP::bdlde::ByteOrder::Enum_ () | int32_t method_BloombergLP::bdlde::CharConvertUtf32_utf32ToUtf8_std::_1::basic_string_char_std::_1::char_traits_char_std::_1::allocator_char_unsigned_int_const_unsigned_long_unsigned_long_unsigned_char_BloombergLP::bdlde::ByteOrder::Enum_ (int64_t arg6, int64_t arg5, int64_t arg4, int64_t arg3, int64_t arg2, int64_t arg1) { | int64_t var_4h; | int64_t var_8h; | int64_t var_10h; | r9 = arg6; | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlde::CharConvertUtf32::utf32ToUtf8(std::__1::basic_string, std::__1::allocator >*, unsigned int const*, unsigned long, unsigned long*, unsigned char, BloombergLP::bdlde::ByteOrder::Enum) */ 0x0044f690 push rbp | 0x0044f691 push r15 | 0x0044f693 push r14 | 0x0044f695 push r13 | 0x0044f697 push r12 | 0x0044f699 push rbx | 0x0044f69a sub rsp, 0x18 | 0x0044f69e mov ebp, r9d | 0x0044f6a1 mov r13, rcx | r13 = rcx; 0x0044f6a4 mov r15, rsi | r15 = rsi; 0x0044f6a7 mov r14, rdi | r14 = rdi; 0x0044f6aa lea r12, [rsi + rdx*4] | r12 = rsi + rdx*4; 0x0044f6ae xor eax, eax | eax = 0; 0x0044f6b0 mov dword [rsp + 4], r8d | *((rsp + 4)) = r8d; 0x0044f6b5 test r8b, r8b | 0x0044f6b8 setne al | al = (r8b != 0) ? 1 : 0; 0x0044f6bb test r9d, r9d | | if (r9d == 0) { 0x0044f6be je 0x44f73a | goto label_2; | } 0x0044f6c0 test rdx, rdx | | if (rdx <= 0) { 0x0044f6c3 jle 0x44f7b9 | goto label_3; | } 0x0044f6c9 xor ebx, ebx | ebx = 0; 0x0044f6cb mov rcx, r15 | rcx = r15; 0x0044f6ce jmp 0x44f6e2 | | while (edx < 0x80) { | label_0: 0x0044f6d0 mov edx, esi | edx = esi; 0x0044f6d2 add rbx, rdx | rbx += rdx; 0x0044f6d5 add rcx, 4 | rcx += 4; 0x0044f6d9 cmp rcx, r12 | | if (rcx >= r12) { 0x0044f6dc jae 0x44f7b4 | goto label_4; | } 0x0044f6e2 mov edx, dword [rcx] | edx = *(rcx); 0x0044f6e4 bswap edx | edx = SWAP32 (edx); 0x0044f6e6 mov esi, 1 | esi = 1; 0x0044f6eb cmp edx, 0x80 | 0x0044f6f1 jb 0x44f6d0 | | } 0x0044f6f3 mov esi, 2 | esi = 2; 0x0044f6f8 cmp edx, 0x800 | | if (edx < 0x800) { 0x0044f6fe jb 0x44f6d0 | goto label_0; | } 0x0044f700 cmp edx, 0xffff | | if (edx > 0xffff) { 0x0044f706 ja 0x44f71f | goto label_5; | } 0x0044f708 and edx, 0xfffff800 | edx &= 0xfffff800; 0x0044f70e mov esi, eax | esi = eax; 0x0044f710 cmp edx, 0xd800 | | if (edx == 0xd800) { 0x0044f716 je 0x44f6d0 | goto label_0; | } 0x0044f718 mov esi, 3 | esi = 3; 0x0044f71d jmp 0x44f6d0 | goto label_0; | label_5: 0x0044f71f mov esi, eax | esi = eax; 0x0044f721 cmp edx, 0x1fffff | | if (edx > 0x1fffff) { 0x0044f727 ja 0x44f6d0 | goto label_0; | } 0x0044f729 mov esi, eax | esi = eax; 0x0044f72b cmp edx, 0x10ffff | | if (edx > 0x10ffff) { 0x0044f731 ja 0x44f6d0 | goto label_0; | } 0x0044f733 mov esi, 4 | esi = 4; 0x0044f738 jmp 0x44f6d0 | goto label_0; | label_2: 0x0044f73a test rdx, rdx | | if (rdx <= 0) { 0x0044f73d jle 0x44f7b9 | goto label_3; | } 0x0044f73f xor ebx, ebx | ebx = 0; 0x0044f741 mov rcx, r15 | rcx = r15; 0x0044f744 jmp 0x44f75e | | while (esi < 0x80) { | label_1: 0x0044f750 mov edx, edx | 0x0044f752 add rbx, rdx | rbx += rdx; 0x0044f755 add rcx, 4 | rcx += 4; 0x0044f759 cmp rcx, r12 | | if (rcx >= r12) { 0x0044f75c jae 0x44f7b4 | goto label_4; | } 0x0044f75e mov esi, dword [rcx] | esi = *(rcx); 0x0044f760 mov edx, 1 | edx = 1; 0x0044f765 cmp esi, 0x80 | 0x0044f76b jb 0x44f750 | | } 0x0044f76d mov edx, 2 | edx = 2; 0x0044f772 cmp esi, 0x800 | | if (esi < 0x800) { 0x0044f778 jb 0x44f750 | goto label_1; | } 0x0044f77a cmp esi, 0xffff | | if (esi > 0xffff) { 0x0044f780 ja 0x44f799 | goto label_6; | } 0x0044f782 and esi, 0xfffff800 | esi &= 0xfffff800; 0x0044f788 mov edx, eax | edx = eax; 0x0044f78a cmp esi, 0xd800 | | if (esi == 0xd800) { 0x0044f790 je 0x44f750 | goto label_1; | } 0x0044f792 mov edx, 3 | edx = 3; 0x0044f797 jmp 0x44f750 | goto label_1; | label_6: 0x0044f799 mov edx, eax | edx = eax; 0x0044f79b cmp esi, 0x1fffff | | if (esi > 0x1fffff) { 0x0044f7a1 ja 0x44f750 | goto label_1; | } 0x0044f7a3 mov edx, eax | edx = eax; 0x0044f7a5 cmp esi, 0x10ffff | | if (esi > 0x10ffff) { 0x0044f7ab ja 0x44f750 | goto label_1; | } 0x0044f7ad mov edx, 4 | edx = 4; 0x0044f7b2 jmp 0x44f750 | goto label_1; | label_4: 0x0044f7b4 inc rbx | rbx++; 0x0044f7b7 jmp 0x44f7be | goto label_7; | label_3: 0x0044f7b9 mov ebx, 1 | ebx = 1; | label_7: 0x0044f7be mov rdi, r14 | rdi = r14; 0x0044f7c1 mov rsi, rbx | rsi = rbx; 0x0044f7c4 xor edx, edx | edx = 0; 0x0044f7c6 call 0x404d00 | std::_1::basic_string,std::_1::allocator>::resize(unsigned long,char) (); 0x0044f7cb test r13, r13 | 0x0044f7ce lea rcx, [rsp + 0x10] | rcx = rsp + 0x10; | if (r13 != 0) { 0x0044f7d3 cmovne rcx, r13 | rcx = r13; | } 0x0044f7d7 test byte [r14], 1 | | if ((*(r14) & 1) != 0) { 0x0044f7db jne 0x44f7fd | goto label_8; | } 0x0044f7dd lea rdi, [r14 + 1] | rdi = r14 + 1; 0x0044f7e1 test ebp, ebp | | if (ebp == 0) { 0x0044f7e3 je 0x44f805 | goto label_9; | } | do { 0x0044f7e5 movsx r9d, byte [rsp + 4] | r9d = *((rsp + 4)); 0x0044f7eb lea r8, [rsp + 8] | r8 = rsp + 8; 0x0044f7f0 mov rsi, r12 | rsi = r12; 0x0044f7f3 mov rdx, r15 | rdx = r15; 0x0044f7f6 call 0x4511c0 | (anonymousnamespace)::Utf32ToUtf8Translator<(anonymousnamespace)::NoopCapacity,(anonymousnamespace)::Utf32PtrBasedEnd,(anonymousnamespace)::Swapper>::translate(char*,unsigned long,(anonymousnamespace)::Utf32PtrBasedEnd,unsignedintconst*,unsigned long*,unsigned long*,char) (); 0x0044f7fb jmp 0x44f81b | goto label_10; | label_8: 0x0044f7fd mov rdi, qword [r14 + 0x10] | rdi = *((r14 + 0x10)); 0x0044f801 test ebp, ebp | 0x0044f803 jne 0x44f7e5 | | } while (ebp != 0); | label_9: 0x0044f805 movsx r9d, byte [rsp + 4] | r9d = *((rsp + 4)); 0x0044f80b lea r8, [rsp + 8] | r8 = rsp + 8; 0x0044f810 mov rsi, r12 | rsi = r12; 0x0044f813 mov rdx, r15 | rdx = r15; 0x0044f816 call 0x451080 | eax = (anonymousnamespace)::Utf32ToUtf8Translator<(anonymousnamespace)::NoopCapacity,(anonymousnamespace)::Utf32PtrBasedEnd,(anonymousnamespace)::NoopSwapper>::translate(char*,unsigned long,(anonymousnamespace)::Utf32PtrBasedEnd,unsignedintconst*,unsigned long*,unsigned long*,char) (); | label_10: 0x0044f81b mov ebp, eax | 0x0044f81d dec rbx | rbx--; 0x0044f820 mov rdi, r14 | rdi = r14; 0x0044f823 mov rsi, rbx | rsi = rbx; 0x0044f826 xor edx, edx | edx = 0; 0x0044f828 call 0x404d00 | std::_1::basic_string,std::_1::allocator>::resize(unsigned long,char) (); 0x0044f82d mov eax, ebp | eax = ebp; 0x0044f82f add rsp, 0x18 | 0x0044f833 pop rbx | 0x0044f834 pop r12 | 0x0044f836 pop r13 | 0x0044f838 pop r14 | 0x0044f83a pop r15 | 0x0044f83c pop rbp | 0x0044f83d ret | return eax; | }