; assembly | /* r2dec pseudo code output */ | /* baljsn_datumutil.t/none @ 0x44fcb0 */ | #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_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) */ 0x0044fcb0 push rbp | 0x0044fcb1 push r15 | 0x0044fcb3 push r14 | 0x0044fcb5 push r13 | 0x0044fcb7 push r12 | 0x0044fcb9 push rbx | 0x0044fcba sub rsp, 0x18 | 0x0044fcbe mov r13d, r9d | r13d = r9d; 0x0044fcc1 mov r12d, r8d | r12d = r8d; 0x0044fcc4 mov rbp, rcx | 0x0044fcc7 mov r14, rsi | r14 = rsi; 0x0044fcca mov r15, rdi | r15 = rdi; 0x0044fccd lea rbx, [rsi + rdx*4] | rbx = rsi + rdx*4; 0x0044fcd1 xor eax, eax | eax = 0; 0x0044fcd3 test r12b, r12b | 0x0044fcd6 setne al | al = (r12b != 0) ? 1 : 0; 0x0044fcd9 test r9d, r9d | | if (r9d == 0) { 0x0044fcdc je 0x44fd5a | goto label_2; | } 0x0044fcde test rdx, rdx | | if (rdx <= 0) { 0x0044fce1 jle 0x44fdd9 | goto label_3; | } 0x0044fce7 xor esi, esi | esi = 0; 0x0044fce9 mov rcx, r14 | rcx = r14; 0x0044fcec jmp 0x44fd02 | | while (edx < 0x80) { | label_0: 0x0044fcf0 mov edx, edi | edx = edi; 0x0044fcf2 add rsi, rdx | rsi += rdx; 0x0044fcf5 add rcx, 4 | rcx += 4; 0x0044fcf9 cmp rcx, rbx | | if (rcx >= rbx) { 0x0044fcfc jae 0x44fdd4 | goto label_4; | } 0x0044fd02 mov edx, dword [rcx] | edx = *(rcx); 0x0044fd04 bswap edx | edx = SWAP32 (edx); 0x0044fd06 mov edi, 1 | edi = 1; 0x0044fd0b cmp edx, 0x80 | 0x0044fd11 jb 0x44fcf0 | | } 0x0044fd13 mov edi, 2 | edi = 2; 0x0044fd18 cmp edx, 0x800 | | if (edx < 0x800) { 0x0044fd1e jb 0x44fcf0 | goto label_0; | } 0x0044fd20 cmp edx, 0xffff | | if (edx > 0xffff) { 0x0044fd26 ja 0x44fd3f | goto label_5; | } 0x0044fd28 and edx, 0xfffff800 | edx &= 0xfffff800; 0x0044fd2e mov edi, eax | edi = eax; 0x0044fd30 cmp edx, 0xd800 | | if (edx == 0xd800) { 0x0044fd36 je 0x44fcf0 | goto label_0; | } 0x0044fd38 mov edi, 3 | edi = 3; 0x0044fd3d jmp 0x44fcf0 | goto label_0; | label_5: 0x0044fd3f mov edi, eax | edi = eax; 0x0044fd41 cmp edx, 0x1fffff | | if (edx > 0x1fffff) { 0x0044fd47 ja 0x44fcf0 | goto label_0; | } 0x0044fd49 mov edi, eax | edi = eax; 0x0044fd4b cmp edx, 0x10ffff | | if (edx > 0x10ffff) { 0x0044fd51 ja 0x44fcf0 | goto label_0; | } 0x0044fd53 mov edi, 4 | edi = 4; 0x0044fd58 jmp 0x44fcf0 | goto label_0; | label_2: 0x0044fd5a test rdx, rdx | | if (rdx <= 0) { 0x0044fd5d jle 0x44fdd9 | goto label_3; | } 0x0044fd5f xor esi, esi | esi = 0; 0x0044fd61 mov rcx, r14 | rcx = r14; 0x0044fd64 jmp 0x44fd7e | | while (edi < 0x80) { | label_1: 0x0044fd70 mov edx, edx | 0x0044fd72 add rsi, rdx | rsi += rdx; 0x0044fd75 add rcx, 4 | rcx += 4; 0x0044fd79 cmp rcx, rbx | | if (rcx >= rbx) { 0x0044fd7c jae 0x44fdd4 | goto label_4; | } 0x0044fd7e mov edi, dword [rcx] | edi = *(rcx); 0x0044fd80 mov edx, 1 | edx = 1; 0x0044fd85 cmp edi, 0x80 | 0x0044fd8b jb 0x44fd70 | | } 0x0044fd8d mov edx, 2 | edx = 2; 0x0044fd92 cmp edi, 0x800 | | if (edi < 0x800) { 0x0044fd98 jb 0x44fd70 | goto label_1; | } 0x0044fd9a cmp edi, 0xffff | | if (edi > 0xffff) { 0x0044fda0 ja 0x44fdb9 | goto label_6; | } 0x0044fda2 and edi, 0xfffff800 | edi &= 0xfffff800; 0x0044fda8 mov edx, eax | edx = eax; 0x0044fdaa cmp edi, 0xd800 | | if (edi == 0xd800) { 0x0044fdb0 je 0x44fd70 | goto label_1; | } 0x0044fdb2 mov edx, 3 | edx = 3; 0x0044fdb7 jmp 0x44fd70 | goto label_1; | label_6: 0x0044fdb9 mov edx, eax | edx = eax; 0x0044fdbb cmp edi, 0x1fffff | | if (edi > 0x1fffff) { 0x0044fdc1 ja 0x44fd70 | goto label_1; | } 0x0044fdc3 mov edx, eax | edx = eax; 0x0044fdc5 cmp edi, 0x10ffff | | if (edi > 0x10ffff) { 0x0044fdcb ja 0x44fd70 | goto label_1; | } 0x0044fdcd mov edx, 4 | edx = 4; 0x0044fdd2 jmp 0x44fd70 | goto label_1; | label_4: 0x0044fdd4 inc rsi | rsi++; 0x0044fdd7 jmp 0x44fdde | goto label_7; | label_3: 0x0044fdd9 mov esi, 1 | esi = 1; | label_7: 0x0044fdde mov rdi, r15 | rdi = r15; 0x0044fde1 xor edx, edx | edx = 0; 0x0044fde3 call 0x404d00 | std::_1::basic_string,std::_1::allocator>::resize(unsigned long,char) (); 0x0044fde8 test rbp, rbp | 0x0044fdeb lea rcx, [rsp + 0x10] | rcx = rsp + 0x10; | if (rbp != 0) { 0x0044fdf0 cmovne rcx, rbp | rcx = rbp; | } 0x0044fdf4 test byte [r15], 1 | | if ((*(r15) & 1) == 0) { 0x0044fdf8 jne 0x44fe00 | 0x0044fdfa lea rdi, [r15 + 1] | rdi = r15 + 1; 0x0044fdfe jmp 0x44fe04 | | } else { 0x0044fe00 mov rdi, qword [r15 + 0x10] | rdi = *((r15 + 0x10)); | } 0x0044fe04 movsx r9d, r12b | r9d = (int32_t) r12b; 0x0044fe08 lea r8, [rsp + 8] | r8 = rsp + 8; 0x0044fe0d mov rsi, rbx | rsi = rbx; 0x0044fe10 mov rdx, r14 | rdx = r14; 0x0044fe13 test r13d, r13d | | if (r13d != 0) { 0x0044fe16 je 0x44fe1f | 0x0044fe18 call 0x4517d0 | (anonymousnamespace)::Utf32ToUtf8Translator<(anonymousnamespace)::NoopCapacity,(anonymousnamespace)::Utf32PtrBasedEnd,(anonymousnamespace)::Swapper>::translate(char*,unsigned long,(anonymousnamespace)::Utf32PtrBasedEnd,unsignedintconst*,unsigned long*,unsigned long*,char) (); 0x0044fe1d jmp 0x44fe24 | | } else { 0x0044fe1f call 0x451690 | eax = (anonymousnamespace)::Utf32ToUtf8Translator<(anonymousnamespace)::NoopCapacity,(anonymousnamespace)::Utf32PtrBasedEnd,(anonymousnamespace)::NoopSwapper>::translate(char*,unsigned long,(anonymousnamespace)::Utf32PtrBasedEnd,unsignedintconst*,unsigned long*,unsigned long*,char) (); | } 0x0044fe24 mov ebx, eax | ebx = eax; 0x0044fe26 mov rsi, qword [rsp + 8] | rsi = *((rsp + 8)); 0x0044fe2b dec rsi | rsi--; 0x0044fe2e mov rdi, r15 | rdi = r15; 0x0044fe31 xor edx, edx | edx = 0; 0x0044fe33 call 0x404d00 | std::_1::basic_string,std::_1::allocator>::resize(unsigned long,char) (); 0x0044fe38 mov eax, ebx | eax = ebx; 0x0044fe3a add rsp, 0x18 | 0x0044fe3e pop rbx | 0x0044fe3f pop r12 | 0x0044fe41 pop r13 | 0x0044fe43 pop r14 | 0x0044fe45 pop r15 | 0x0044fe47 pop rbp | 0x0044fe48 ret | return eax; | }