; assembly | /* r2dec pseudo code output */ | /* baljsn_datumutil.t/none @ 0x44f350 */ | #include | | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \ | ((n & 0x0000ff00) << 8) | \ | ((n & 0x00ff0000) >> 8) | \ | ((n & 0xff000000) >> 24))) | ; (fcn) method.BloombergLP::bdlde::CharConvertUtf32.utf8ToUtf32_unsigned_int__unsigned_long__std::__1::basic_string_view_char__std::__1::char_traits_char____const__unsigned_long__unsigned_int__BloombergLP::bdlde::ByteOrder::Enum_ () | int64_t method_BloombergLP::bdlde::CharConvertUtf32_utf8ToUtf32_unsigned_int_unsigned_long_std::_1::basic_string_view_char_std::_1::char_traits_char_const_unsigned_long_unsigned_int_BloombergLP::bdlde::ByteOrder::Enum_ (int64_t arg6, int64_t arg5, int64_t arg4, int64_t arg3, uint32_t arg2, int64_t arg1) { | r9 = arg6; | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlde::CharConvertUtf32::utf8ToUtf32(unsigned int*, unsigned long, std::__1::basic_string_view > const&, unsigned long*, unsigned int, BloombergLP::bdlde::ByteOrder::Enum) */ 0x0044f350 push rbp | 0x0044f351 push r15 | 0x0044f353 push r14 | 0x0044f355 push r13 | 0x0044f357 push r12 | 0x0044f359 push rbx | 0x0044f35a test rcx, rcx | 0x0044f35d lea r10, [rsp - 8] | r10 = rsp - 8; | if (rcx != 0) { 0x0044f362 cmovne r10, rcx | r10 = rcx; | } 0x0044f366 test rsi, rsi | | if (rsi == 0) { 0x0044f369 je 0x44f570 | goto label_7; | } 0x0044f36f mov rbp, qword [rdx] | rbp = *(rdx); 0x0044f372 mov rax, qword [rdx + 8] | rax = *((rdx + 8)); 0x0044f376 lea r13, [rbp + rax] | r13 = rbp + rax; 0x0044f37b test r9d, r9d | | if (r9d == 0) { 0x0044f37e je 0x44f581 | goto label_8; | } 0x0044f384 test rax, rax | | if (rax <= 0) { 0x0044f387 jle 0x44f770 | goto label_9; | } 0x0044f38d mov r9d, r8d | r9d = r8d; 0x0044f390 bswap r9d | r9d = SWAP32 (r9d); 0x0044f393 xor r11d, r11d | r11d = 0; 0x0044f396 mov rdx, rdi | rdx = rdi; 0x0044f399 jmp 0x44f3bd | goto label_10; | label_1: 0x0044f3a0 mov r11b, 1 | r11b = 1; 0x0044f3a3 mov ebx, r9d | ebx = r9d; 0x0044f3a6 test r8d, r8d | 0x0044f3a9 je 0x44f3b4 | | while (1) { 0x0044f3ab mov dword [rdx], ebx | *(rdx) = ebx; 0x0044f3ad add rdx, 4 | rdx += 4; 0x0044f3b1 dec rsi | rsi--; 0x0044f3b4 cmp rbp, r13 | | if (rbp >= r13) { 0x0044f3b7 jae 0x44f776 | goto label_11; | } | label_10: 0x0044f3bd cmp rsi, 2 | | if (rsi < 2) { 0x0044f3c1 jb 0x44f77a | goto label_12; | } 0x0044f3c7 movzx ebx, byte [rbp] | ebx = *(rbp); 0x0044f3cb test bl, bl | | if (bl < 0) { 0x0044f3cd js 0x44f3e0 | goto label_13; | } 0x0044f3cf mov eax, 1 | eax = 1; | label_0: 0x0044f3d4 add rbp, rax | rbp += rax; 0x0044f3d7 bswap ebx | ebx = SWAP32 (ebx); 0x0044f3d9 jmp 0x44f3ab | | } | label_13: 0x0044f3e0 mov eax, ebx | eax = ebx; 0x0044f3e2 and al, 0xe0 | al &= 0xe0; 0x0044f3e4 cmp al, 0xc0 | | if (al != 0xc0) { 0x0044f3e6 jne 0x44f427 | goto label_14; | } 0x0044f3e8 lea rax, [rbp + 2] | rax = rbp + 2; 0x0044f3ec mov r14d, 1 | r14d = 1; 0x0044f3f2 cmp rax, r13 | | if (rax > r13) { 0x0044f3f5 ja 0x44f530 | goto label_15; | } 0x0044f3fb movzx eax, byte [rbp + 1] | eax = *((rbp + 1)); 0x0044f3ff mov ecx, eax | ecx = eax; 0x0044f401 and cl, 0xc0 | cl &= 0xc0; 0x0044f404 cmp cl, 0x80 | | if (cl != 0x80) { 0x0044f407 jne 0x44f530 | goto label_15; | } 0x0044f40d and eax, 0x3f | eax &= 0x3f; 0x0044f410 and ebx, 0x1f | ebx &= 0x1f; 0x0044f413 shl ebx, 6 | ebx <<= 6; 0x0044f416 or ebx, eax | ebx |= eax; 0x0044f418 mov eax, 2 | eax = 2; 0x0044f41d cmp ebx, 0x7f | | if (ebx > 0x7f) { 0x0044f420 ja 0x44f3d4 | goto label_0; | } 0x0044f422 jmp 0x44f530 | goto label_15; | label_14: 0x0044f427 mov eax, ebx | eax = ebx; 0x0044f429 and al, 0xf0 | al &= 0xf0; 0x0044f42b cmp al, 0xe0 | | if (al != 0xe0) { 0x0044f42d jne 0x44f4a5 | goto label_16; | } 0x0044f42f lea rax, [rbp + 3] | rax = rbp + 3; 0x0044f433 mov r14d, 2 | r14d = 2; 0x0044f439 cmp rax, r13 | | if (rax > r13) { 0x0044f43c ja 0x44f530 | goto label_15; | } 0x0044f442 movzx eax, byte [rbp + 1] | eax = *((rbp + 1)); 0x0044f446 mov ecx, eax | ecx = eax; 0x0044f448 and cl, 0xc0 | cl &= 0xc0; 0x0044f44b cmp cl, 0x80 | | if (cl != 0x80) { 0x0044f44e jne 0x44f530 | goto label_15; | } 0x0044f454 movzx r15d, byte [rbp + 2] | r15d = *((rbp + 2)); 0x0044f459 mov ecx, r15d | ecx = r15d; 0x0044f45c and cl, 0xc0 | cl &= 0xc0; 0x0044f45f cmp cl, 0x80 | | if (cl != 0x80) { 0x0044f462 jne 0x44f530 | goto label_15; | } 0x0044f468 and eax, 0x3f | eax &= 0x3f; 0x0044f46b shl eax, 6 | eax <<= 6; 0x0044f46e and ebx, 0xf | ebx &= 0xf; 0x0044f471 shl ebx, 0xc | ebx <<= 0xc; 0x0044f474 or ebx, eax | ebx |= eax; 0x0044f476 mov eax, ebx | eax = ebx; 0x0044f478 and eax, 0xf800 | eax &= 0xf800; 0x0044f47d cmp eax, 0xd800 | | if (eax == 0xd800) { 0x0044f482 je 0x44f530 | goto label_15; | } 0x0044f488 and r15d, 0x3f | r15d &= 0x3f; 0x0044f48c or ebx, r15d | ebx |= r15d; 0x0044f48f mov eax, 3 | eax = 3; 0x0044f494 cmp ebx, 0x800 | | if (ebx >= 0x800) { 0x0044f49a jae 0x44f3d4 | goto label_0; | } 0x0044f4a0 jmp 0x44f530 | goto label_15; | label_16: 0x0044f4a5 mov eax, ebx | eax = ebx; 0x0044f4a7 and al, 0xf8 | al &= 0xf8; 0x0044f4a9 mov r14d, 4 | r14d = 4; 0x0044f4af cmp al, 0xf0 | | if (al == 0xf0) { 0x0044f4b1 jne 0x44f530 | 0x0044f4b3 lea rax, [rbp + 4] | rax = rbp + 4; 0x0044f4b7 mov r14d, 3 | r14d = 3; 0x0044f4bd cmp rax, r13 | | if (rax > r13) { 0x0044f4c0 ja 0x44f530 | goto label_15; | } 0x0044f4c2 movzx eax, byte [rbp + 1] | eax = *((rbp + 1)); 0x0044f4c6 mov ecx, eax | ecx = eax; 0x0044f4c8 and cl, 0xc0 | cl &= 0xc0; 0x0044f4cb cmp cl, 0x80 | | if (cl != 0x80) { 0x0044f4ce jne 0x44f530 | goto label_15; | } 0x0044f4d0 movzx r12d, byte [rbp + 2] | r12d = *((rbp + 2)); 0x0044f4d5 mov ecx, r12d | ecx = r12d; 0x0044f4d8 and cl, 0xc0 | cl &= 0xc0; 0x0044f4db cmp cl, 0x80 | | if (cl != 0x80) { 0x0044f4de jne 0x44f530 | goto label_15; | } 0x0044f4e0 movzx r15d, byte [rbp + 3] | r15d = *((rbp + 3)); 0x0044f4e5 mov ecx, r15d | ecx = r15d; 0x0044f4e8 and cl, 0xc0 | cl &= 0xc0; 0x0044f4eb cmp cl, 0x80 | | if (cl != 0x80) { 0x0044f4ee jne 0x44f530 | goto label_15; | } 0x0044f4f0 and r15d, 0x3f | r15d &= 0x3f; 0x0044f4f4 and r12d, 0x3f | r12d &= 0x3f; 0x0044f4f8 shl r12d, 6 | r12d <<= 6; 0x0044f4fc and eax, 0x3f | eax &= 0x3f; 0x0044f4ff shl eax, 0xc | eax <<= 0xc; 0x0044f502 and ebx, 7 | ebx &= 7; 0x0044f505 shl ebx, 0x12 | ebx <<= 0x12; 0x0044f508 or ebx, eax | ebx |= eax; 0x0044f50a or ebx, r12d | ebx |= r12d; 0x0044f50d lea eax, [r15 + rbx - 0x10000] | eax = r15 + rbx - 0x10000; 0x0044f515 cmp eax, 0x100000 | | if (eax >= 0x100000) { 0x0044f51a jae 0x44f530 | goto label_15; | } 0x0044f51c or ebx, r15d | ebx |= r15d; 0x0044f51f mov eax, 4 | eax = 4; 0x0044f524 jmp 0x44f3d4 | goto label_0; | } | label_15: 0x0044f530 lea rax, [rbp + r14 + 1] | rax = rbp + r14 + 1; 0x0044f535 inc rbp | rbp++; 0x0044f538 cmp rax, r13 | | if (rax >= r13) { 0x0044f53b cmovae rax, r13 | rax = r13; | } 0x0044f53f cmp rax, rbp | | if (rax <= rbp) { 0x0044f542 jbe 0x44f3a0 | goto label_1; | } 0x0044f548 nop dword [rax + rax] | | label_2: 0x0044f550 movzx ecx, byte [rbp] | ecx = *(rbp); 0x0044f554 and cl, 0xc0 | cl &= 0xc0; 0x0044f557 cmp cl, 0x80 | | if (cl != 0x80) { 0x0044f55a jne 0x44f3a0 | goto label_1; | } 0x0044f560 inc rbp | rbp++; 0x0044f563 cmp rax, rbp | | if (rax != rbp) { 0x0044f566 jne 0x44f550 | goto label_2; | } 0x0044f568 mov rbp, rax | 0x0044f56b jmp 0x44f3a0 | goto label_1; | label_7: 0x0044f570 mov qword [r10], 0 | *(r10) = 0; 0x0044f577 mov eax, 2 | eax = 2; 0x0044f57c jmp 0x44f7bd | goto label_17; | label_8: 0x0044f581 xor r9d, r9d | r9d = 0; 0x0044f584 mov rdx, rdi | rdx = rdi; 0x0044f587 test rax, rax | | if (rax > 0) { 0x0044f58a jg 0x44f5b9 | goto label_18; | } | do { 0x0044f58c xor ecx, ecx | ecx = 0; 0x0044f58e jmp 0x44f79f | goto label_19; | label_5: 0x0044f5a0 mov r9b, 1 | r9b = 1; 0x0044f5a3 mov ebx, r8d | ebx = r8d; 0x0044f5a6 test r8d, r8d | | if (r8d != 0) { 0x0044f5a9 je 0x44f5b4 | | label_3: 0x0044f5ab mov dword [rdx], ebx | *(rdx) = ebx; 0x0044f5ad add rdx, 4 | rdx += 4; 0x0044f5b1 dec rsi | rsi--; | } 0x0044f5b4 cmp rbp, r13 | 0x0044f5b7 jae 0x44f58c | | } while (rbp >= r13); | label_18: 0x0044f5b9 cmp rsi, 2 | | if (rsi < 2) { 0x0044f5bd jb 0x44f79a | goto label_20; | } 0x0044f5c3 movzx ebx, byte [rbp] | ebx = *(rbp); 0x0044f5c7 test bl, bl | | if (bl < 0) { 0x0044f5c9 js 0x44f5e0 | goto label_21; | } 0x0044f5cb mov eax, 1 | eax = 1; | do { | label_4: 0x0044f5d0 add rbp, rax | rbp += rax; 0x0044f5d3 jmp 0x44f5ab | goto label_3; | label_21: 0x0044f5e0 mov eax, ebx | eax = ebx; 0x0044f5e2 and al, 0xe0 | al &= 0xe0; 0x0044f5e4 cmp al, 0xc0 | | if (al != 0xc0) { 0x0044f5e6 jne 0x44f629 | goto label_22; | } 0x0044f5e8 lea rax, [rbp + 2] | rax = rbp + 2; 0x0044f5ec mov r11d, 1 | r11d = 1; 0x0044f5f2 cmp rax, r13 | | if (rax > r13) { 0x0044f5f5 ja 0x44f730 | goto label_23; | } 0x0044f5fb movzx r14d, byte [rbp + 1] | r14d = *((rbp + 1)); 0x0044f600 mov eax, r14d | eax = r14d; 0x0044f603 and al, 0xc0 | al &= 0xc0; 0x0044f605 cmp al, 0x80 | | if (al != 0x80) { 0x0044f607 jne 0x44f730 | goto label_23; | } 0x0044f60d and r14d, 0x3f | r14d &= 0x3f; 0x0044f611 and ebx, 0x1f | ebx &= 0x1f; 0x0044f614 shl ebx, 6 | ebx <<= 6; 0x0044f617 or ebx, r14d | ebx |= r14d; 0x0044f61a mov eax, 2 | eax = 2; 0x0044f61f cmp ebx, 0x7f | 0x0044f622 ja 0x44f5d0 | | } while (ebx > 0x7f); 0x0044f624 jmp 0x44f730 | goto label_23; | label_22: 0x0044f629 mov eax, ebx | eax = ebx; 0x0044f62b and al, 0xf0 | al &= 0xf0; 0x0044f62d cmp al, 0xe0 | | if (al != 0xe0) { 0x0044f62f jne 0x44f6a8 | goto label_24; | } 0x0044f631 lea rax, [rbp + 3] | rax = rbp + 3; 0x0044f635 mov r11d, 2 | r11d = 2; 0x0044f63b cmp rax, r13 | | if (rax > r13) { 0x0044f63e ja 0x44f730 | goto label_23; | } 0x0044f644 movzx r15d, byte [rbp + 1] | r15d = *((rbp + 1)); 0x0044f649 mov eax, r15d | eax = r15d; 0x0044f64c and al, 0xc0 | al &= 0xc0; 0x0044f64e cmp al, 0x80 | | if (al != 0x80) { 0x0044f650 jne 0x44f730 | goto label_23; | } 0x0044f656 movzx r14d, byte [rbp + 2] | r14d = *((rbp + 2)); 0x0044f65b mov eax, r14d | eax = r14d; 0x0044f65e and al, 0xc0 | al &= 0xc0; 0x0044f660 cmp al, 0x80 | | if (al != 0x80) { 0x0044f662 jne 0x44f730 | goto label_23; | } 0x0044f668 and r15d, 0x3f | r15d &= 0x3f; 0x0044f66c shl r15d, 6 | r15d <<= 6; 0x0044f670 and ebx, 0xf | ebx &= 0xf; 0x0044f673 shl ebx, 0xc | ebx <<= 0xc; 0x0044f676 or ebx, r15d | ebx |= r15d; 0x0044f679 mov eax, ebx | eax = ebx; 0x0044f67b and eax, 0xf800 | eax &= 0xf800; 0x0044f680 cmp eax, 0xd800 | | if (eax == 0xd800) { 0x0044f685 je 0x44f730 | goto label_23; | } 0x0044f68b and r14d, 0x3f | r14d &= 0x3f; 0x0044f68f or ebx, r14d | ebx |= r14d; 0x0044f692 mov eax, 3 | eax = 3; 0x0044f697 cmp ebx, 0x800 | | if (ebx >= 0x800) { 0x0044f69d jae 0x44f5d0 | goto label_4; | } 0x0044f6a3 jmp 0x44f730 | goto label_23; | label_24: 0x0044f6a8 mov eax, ebx | eax = ebx; 0x0044f6aa and al, 0xf8 | al &= 0xf8; 0x0044f6ac mov r11d, 4 | r11d = 4; 0x0044f6b2 cmp al, 0xf0 | | if (al == 0xf0) { 0x0044f6b4 jne 0x44f730 | 0x0044f6b6 lea rax, [rbp + 4] | rax = rbp + 4; 0x0044f6ba mov r11d, 3 | r11d = 3; 0x0044f6c0 cmp rax, r13 | | if (rax > r13) { 0x0044f6c3 ja 0x44f730 | goto label_23; | } 0x0044f6c5 movzx r12d, byte [rbp + 1] | r12d = *((rbp + 1)); 0x0044f6ca mov eax, r12d | eax = r12d; 0x0044f6cd and al, 0xc0 | al &= 0xc0; 0x0044f6cf cmp al, 0x80 | | if (al != 0x80) { 0x0044f6d1 jne 0x44f730 | goto label_23; | } 0x0044f6d3 movzx r15d, byte [rbp + 2] | r15d = *((rbp + 2)); 0x0044f6d8 mov eax, r15d | eax = r15d; 0x0044f6db and al, 0xc0 | al &= 0xc0; 0x0044f6dd cmp al, 0x80 | | if (al != 0x80) { 0x0044f6df jne 0x44f730 | goto label_23; | } 0x0044f6e1 movzx r14d, byte [rbp + 3] | r14d = *((rbp + 3)); 0x0044f6e6 mov eax, r14d | eax = r14d; 0x0044f6e9 and al, 0xc0 | al &= 0xc0; 0x0044f6eb cmp al, 0x80 | | if (al != 0x80) { 0x0044f6ed jne 0x44f730 | goto label_23; | } 0x0044f6ef and r14d, 0x3f | r14d &= 0x3f; 0x0044f6f3 and r15d, 0x3f | r15d &= 0x3f; 0x0044f6f7 shl r15d, 6 | r15d <<= 6; 0x0044f6fb and r12d, 0x3f | r12d &= 0x3f; 0x0044f6ff shl r12d, 0xc | r12d <<= 0xc; 0x0044f703 and ebx, 7 | ebx &= 7; 0x0044f706 shl ebx, 0x12 | ebx <<= 0x12; 0x0044f709 or ebx, r12d | ebx |= r12d; 0x0044f70c or ebx, r15d | ebx |= r15d; 0x0044f70f lea eax, [r14 + rbx - 0x10000] | eax = r14 + rbx - 0x10000; 0x0044f717 cmp eax, 0x100000 | | if (eax >= 0x100000) { 0x0044f71c jae 0x44f730 | goto label_23; | } 0x0044f71e or ebx, r14d | ebx |= r14d; 0x0044f721 mov eax, 4 | eax = 4; 0x0044f726 jmp 0x44f5d0 | goto label_4; | } | label_23: 0x0044f730 lea rax, [rbp + r11 + 1] | rax = rbp + r11 + 1; 0x0044f735 inc rbp | rbp++; 0x0044f738 cmp rax, r13 | | if (rax >= r13) { 0x0044f73b cmovae rax, r13 | rax = r13; | } 0x0044f73f cmp rax, rbp | | if (rax <= rbp) { 0x0044f742 jbe 0x44f5a0 | goto label_5; | } 0x0044f748 nop dword [rax + rax] | | label_6: 0x0044f750 movzx ebx, byte [rbp] | ebx = *(rbp); 0x0044f754 and bl, 0xc0 | bl &= 0xc0; 0x0044f757 cmp bl, 0x80 | | if (bl != 0x80) { 0x0044f75a jne 0x44f5a0 | goto label_5; | } 0x0044f760 inc rbp | rbp++; 0x0044f763 cmp rax, rbp | | if (rax != rbp) { 0x0044f766 jne 0x44f750 | goto label_6; | } 0x0044f768 mov rbp, rax | 0x0044f76b jmp 0x44f5a0 | goto label_5; | label_9: 0x0044f770 xor r11d, r11d | r11d = 0; 0x0044f773 mov rdx, rdi | rdx = rdi; | label_11: 0x0044f776 xor ecx, ecx | ecx = 0; 0x0044f778 jmp 0x44f77f | goto label_25; | label_12: 0x0044f77a mov ecx, 2 | ecx = 2; | label_25: 0x0044f77f mov dword [rdx], 0 | *(rdx) = 0; 0x0044f785 sub rdx, rdi | rdx -= rdi; 0x0044f788 add rdx, 4 | rdx += 4; 0x0044f78c sar rdx, 2 | rdx >>= 2; 0x0044f790 mov qword [r10], rdx | *(r10) = rdx; 0x0044f793 xor eax, eax | eax = 0; 0x0044f795 test r11b, r11b | 0x0044f798 jmp 0x44f7b8 | goto label_26; | label_20: 0x0044f79a mov ecx, 2 | ecx = 2; | label_19: 0x0044f79f mov dword [rdx], 0 | *(rdx) = 0; 0x0044f7a5 sub rdx, rdi | rdx -= rdi; 0x0044f7a8 add rdx, 4 | rdx += 4; 0x0044f7ac sar rdx, 2 | rdx >>= 2; 0x0044f7b0 mov qword [r10], rdx | *(r10) = rdx; 0x0044f7b3 xor eax, eax | eax = 0; 0x0044f7b5 test r9b, r9b | | label_26: 0x0044f7b8 setne al | al = (r9b != 0) ? 1 : 0; 0x0044f7bb or eax, ecx | eax |= ecx; | label_17: 0x0044f7bd pop rbx | 0x0044f7be pop r12 | r12 = rbx; 0x0044f7c0 pop r13 | r13 = rbx; 0x0044f7c2 pop r14 | r14 = rbx; 0x0044f7c4 pop r15 | r15 = rbx; 0x0044f7c6 pop rbp | 0x0044f7c7 ret | return rax; | }