; assembly | /* r2dec pseudo code output */ | /* bdlde_charconvertutf16.t/none @ 0x42b960 */ | #include | | uint16_t rotate_left16 (uint16_t value, uint32_t count) { | const uint16_t mask = (CHAR_BIT * sizeof (value)) - 1; | count &= mask; | return (value << count) | (value >> (-count & mask)); | } | ; (fcn) method.BloombergLP::bdlde::CharConvertUtf16.utf8ToUtf16_unsigned_short__unsigned_long__std::__1::basic_string_view_char__std::__1::char_traits_char____const__unsigned_long__unsigned_long__unsigned_short__BloombergLP::bdlde::ByteOrder::Enum_ () | int64_t method_BloombergLP::bdlde::CharConvertUtf16_utf8ToUtf16_unsigned_short_unsigned_long_std::_1::basic_string_view_char_std::_1::char_traits_char_const_unsigned_long_unsigned_long_unsigned_short_BloombergLP::bdlde::ByteOrder::Enum_ (uint32_t arg_38h, int64_t arg6, char * arg5, char * arg4, uint32_t arg3, int64_t arg2, char * arg1) { | r9 = arg6; | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlde::CharConvertUtf16::utf8ToUtf16(unsigned short*, unsigned long, std::__1::basic_string_view > const&, unsigned long*, unsigned long*, unsigned short, BloombergLP::bdlde::ByteOrder::Enum) */ 0x0042b960 push rbp | 0x0042b961 push r15 | 0x0042b963 push r14 | 0x0042b965 push r13 | 0x0042b967 push r12 | 0x0042b969 push rbx | 0x0042b96a mov r10, rdi | r10 = rdi; 0x0042b96d mov r15, qword [rdx] | r15 = *(rdx); 0x0042b970 mov rax, qword [rdx + 8] | rax = *((rdx + 8)); 0x0042b974 lea r11, [r15 + rax] | r11 = r15 + rax; 0x0042b978 cmp dword [rsp + 0x38], 0 | | if (*((rsp + 0x38)) == 0) { 0x0042b97d je 0x42bd5f | goto label_8; | } 0x0042b983 test rsi, rsi | | if (rsi == 0) { 0x0042b986 je 0x42c142 | goto label_9; | } 0x0042b98c test rax, rax | | if (rax <= 0) { 0x0042b98f jle 0x42c165 | goto label_10; | } 0x0042b995 mov ebx, r9d | ebx = r9d; 0x0042b998 rol bx, 8 | bx = rotate_left16 (bx, 8); 0x0042b99c movq xmm0, rsi | xmm0 = rsi; 0x0042b9a1 xor eax, eax | eax = 0; 0x0042b9a3 movdqa xmm1, xmmword [rip + 0x3fd05] | __asm ("movdqa xmm1, xmmword [0x0046b6b0]"); 0x0042b9ab movdqa xmm2, xmmword [rip + 0x3fd0d] | __asm ("movdqa xmm2, xmmword [0x0046b6c0]"); 0x0042b9b3 mov r12, r10 | r12 = r10; | label_1: 0x0042b9b6 movq rdx, xmm0 | rdx = xmm0; 0x0042b9bb pextrq rbp, xmm0, 1 | __asm ("pextrq rbp, xmm0, 1"); 0x0042b9c2 add rbp, rdx | rbp += rdx; 0x0042b9c5 cmp rdx, 1 | 0x0042b9c9 adc rbp, 0xffffffffffffffff | rbp += 0xffffffffffffffff; 0x0042b9cd xor r14d, r14d | r14d = 0; 0x0042b9d0 mov rsi, r12 | rsi = r12; 0x0042b9d3 nop word cs:[rax + rax] | 0x0042b9dd nop dword [rax] | | do { 0x0042b9e0 movq r13, xmm0 | r13 = xmm0; 0x0042b9e5 test r9w, r9w | | if (r9w != 0) { 0x0042b9e9 je 0x42b9f5 | 0x0042b9eb cmp r13, 1 | | if (r13 <= 1) { 0x0042b9ef jbe 0x42c177 | goto label_11; | } | } 0x0042b9f5 movzx edx, byte [r15 + r14] | edx = *((r15 + r14)); 0x0042b9fa test dl, dl | | if (dl < 0) { 0x0042b9fc js 0x42ba31 | goto label_12; | } 0x0042b9fe pextrq rdi, xmm0, 1 | __asm ("pextrq rdi, xmm0, 1"); 0x0042ba05 cmp rdi, rbp | | if (rdi == rbp) { 0x0042ba08 je 0x42c183 | goto label_13; | } 0x0042ba0e rol dx, 8 | dx = rotate_left16 (dx, 8); 0x0042ba12 mov word [r12 + r14*2], dx | *((r12 + r14*2)) = dx; 0x0042ba17 add rsi, 2 | rsi += 2; 0x0042ba1b paddq xmm0, xmm1 | __asm ("paddq xmm0, xmm1"); 0x0042ba1f lea rdx, [r15 + r14 + 1] | rdx = r15 + r14 + 1; 0x0042ba24 inc r14 | r14++; 0x0042ba27 cmp rdx, r11 | 0x0042ba2a jb 0x42b9e0 | | } while (rdx < r11); 0x0042ba2c jmp 0x42c17a | goto label_14; | label_12: 0x0042ba31 mov word [rsp - 0x10], bx | *((rsp - 0x10)) = bx; 0x0042ba36 mov ebx, edx | ebx = edx; 0x0042ba38 and bl, 0xe0 | bl &= 0xe0; 0x0042ba3b cmp bl, 0xc0 | | if (bl == 0xc0) { 0x0042ba3e jne 0x42ba81 | 0x0042ba40 lea rbp, [r15 + r14 + 1] | rbp = r15 + r14 + 1; 0x0042ba45 lea rdi, [r15 + r14 + 2] | rdi = r15 + r14 + 2; 0x0042ba4a cmp rdi, r11 | | if (rdi > r11) { 0x0042ba4d ja 0x42bb28 | goto label_15; | } 0x0042ba53 movzx r15d, byte [rbp] | r15d = *(rbp); 0x0042ba58 mov ebx, r15d | ebx = r15d; 0x0042ba5b and bl, 0xc0 | bl &= 0xc0; 0x0042ba5e cmp bl, 0x80 | | if (bl != 0x80) { 0x0042ba61 jne 0x42bb28 | goto label_15; | } 0x0042ba67 and r15d, 0x3f | r15d &= 0x3f; 0x0042ba6b and edx, 0x1f | edx &= 0x1f; 0x0042ba6e shl edx, 6 | edx <<= 6; 0x0042ba71 or edx, r15d | edx |= r15d; 0x0042ba74 cmp edx, 0x80 | | if (edx < 0x80) { 0x0042ba7a jae 0x42baec | 0x0042ba7c jmp 0x42bb11 | | } else { 0x0042ba81 mov ebx, edx | ebx = edx; 0x0042ba83 and bl, 0xf0 | bl &= 0xf0; 0x0042ba86 cmp bl, 0xe0 | | if (bl != 0xe0) { 0x0042ba89 jne 0x42bb5d | goto label_16; | } 0x0042ba8f lea rbp, [r15 + r14 + 1] | rbp = r15 + r14 + 1; 0x0042ba94 lea rdi, [r15 + r14 + 3] | rdi = r15 + r14 + 3; 0x0042ba99 cmp rdi, r11 | | if (rdi > r11) { 0x0042ba9c ja 0x42bc48 | goto label_17; | } 0x0042baa2 movzx ebx, byte [rbp] | ebx = *(rbp); 0x0042baa6 mov dword [rsp - 8], ebx | *((rsp - 8)) = ebx; 0x0042baaa and bl, 0xc0 | bl &= 0xc0; 0x0042baad cmp bl, 0x80 | | if (bl != 0x80) { 0x0042bab0 jne 0x42bc48 | goto label_17; | } 0x0042bab6 movzx r15d, byte [r15 + r14 + 2] | r15d = *((r15 + r14 + 2)); 0x0042babc mov ebx, r15d | ebx = r15d; 0x0042babf and bl, 0xc0 | bl &= 0xc0; 0x0042bac2 cmp bl, 0x80 | | if (bl != 0x80) { 0x0042bac5 jne 0x42bc48 | goto label_17; | } 0x0042bacb and r15d, 0x3f | r15d &= 0x3f; 0x0042bacf mov ebx, dword [rsp - 8] | ebx = *((rsp - 8)); 0x0042bad3 and ebx, 0x3f | ebx &= 0x3f; 0x0042bad6 shl ebx, 6 | ebx <<= 6; 0x0042bad9 and edx, 0xf | edx &= 0xf; 0x0042badc shl edx, 0xc | edx <<= 0xc; 0x0042badf or edx, ebx | edx |= ebx; 0x0042bae1 or edx, r15d | edx |= r15d; 0x0042bae4 cmp edx, 0x800 | | if (edx < 0x800) { 0x0042baea jb 0x42bb11 | goto label_0; | } | } 0x0042baec movzx ebx, word [rsp - 0x10] | ebx = *((rsp - 0x10)); 0x0042baf1 cmp edx, 0xffff | | if (edx > 0xffff) { 0x0042baf7 ja 0x42bbf3 | goto label_18; | } 0x0042bafd mov ebx, edx | ebx = edx; 0x0042baff and ebx, 0xf800 | ebx &= 0xf800; 0x0042bb05 cmp ebx, 0xd800 | | if (ebx != 0xd800) { 0x0042bb0b jne 0x42bd26 | goto label_19; | } | } | label_0: 0x0042bb11 or eax, 1 | eax |= 1; 0x0042bb14 test r9w, r9w | 0x0042bb18 movzx ebx, word [rsp - 0x10] | ebx = *((rsp - 0x10)); | if (r9w != 0) { 0x0042bb1d jne 0x42bd05 | goto label_20; | } 0x0042bb23 jmp 0x42bd12 | goto label_21; | label_15: 0x0042bb28 cmp rbp, r11 | | if (rbp >= r11) { 0x0042bb2b jae 0x42bcef | goto label_22; | } 0x0042bb31 movzx ebx, word [rsp - 0x10] | ebx = *((rsp - 0x10)); 0x0042bb36 nop word cs:[rax + rax] | | do { 0x0042bb40 movzx edx, byte [rbp] | edx = *(rbp); 0x0042bb44 and dl, 0xc0 | dl &= 0xc0; 0x0042bb47 cmp dl, 0x80 | | if (dl != 0x80) { 0x0042bb4a jne 0x42bcf9 | goto label_23; | } 0x0042bb50 inc rbp | rbp++; 0x0042bb53 cmp r11, rbp | 0x0042bb56 jne 0x42bb40 | | } while (r11 != rbp); 0x0042bb58 jmp 0x42bcea | goto label_24; | label_16: 0x0042bb5d mov ebx, edx | ebx = edx; 0x0042bb5f and bl, 0xf8 | bl &= 0xf8; 0x0042bb62 lea rbp, [r15 + r14 + 1] | rbp = r15 + r14 + 1; 0x0042bb67 cmp bl, 0xf0 | | if (bl != 0xf0) { 0x0042bb6a jne 0x42bc70 | goto label_25; | } 0x0042bb70 lea rdi, [r15 + r14 + 4] | rdi = r15 + r14 + 4; 0x0042bb75 cmp rdi, r11 | | if (rdi > r11) { 0x0042bb78 ja 0x42bccc | goto label_26; | } 0x0042bb7e movzx ebx, byte [rbp] | ebx = *(rbp); 0x0042bb82 mov dword [rsp - 8], ebx | *((rsp - 8)) = ebx; 0x0042bb86 and bl, 0xc0 | bl &= 0xc0; 0x0042bb89 cmp bl, 0x80 | | if (bl != 0x80) { 0x0042bb8c jne 0x42bccc | goto label_26; | } 0x0042bb92 movzx ebx, byte [r15 + r14 + 2] | ebx = *((r15 + r14 + 2)); 0x0042bb98 mov dword [rsp - 4], ebx | *((rsp - 4)) = ebx; 0x0042bb9c and bl, 0xc0 | bl &= 0xc0; 0x0042bb9f cmp bl, 0x80 | | if (bl != 0x80) { 0x0042bba2 jne 0x42bccc | goto label_26; | } 0x0042bba8 movzx r15d, byte [r15 + r14 + 3] | r15d = *((r15 + r14 + 3)); 0x0042bbae mov ebx, r15d | ebx = r15d; 0x0042bbb1 and bl, 0xc0 | bl &= 0xc0; 0x0042bbb4 cmp bl, 0x80 | | if (bl != 0x80) { 0x0042bbb7 jne 0x42bccc | goto label_26; | } 0x0042bbbd and r15d, 0x3f | r15d &= 0x3f; 0x0042bbc1 mov ebp, dword [rsp - 4] | ebp = *((rsp - 4)); 0x0042bbc5 and ebp, 0x3f | ebp &= 0x3f; 0x0042bbc8 shl ebp, 6 | ebp <<= 6; 0x0042bbcb mov ebx, dword [rsp - 8] | ebx = *((rsp - 8)); 0x0042bbcf and ebx, 0x3f | ebx &= 0x3f; 0x0042bbd2 shl ebx, 0xc | ebx <<= 0xc; 0x0042bbd5 and edx, 7 | edx &= 7; 0x0042bbd8 shl edx, 0x12 | edx <<= 0x12; 0x0042bbdb or edx, ebx | edx |= ebx; 0x0042bbdd or edx, ebp | edx |= ebp; 0x0042bbdf or edx, r15d | edx |= r15d; 0x0042bbe2 cmp edx, 0x10000 | | if (edx < 0x10000) { 0x0042bbe8 jb 0x42bb11 | goto label_0; | } 0x0042bbee movzx ebx, word [rsp - 0x10] | ebx = *((rsp - 0x10)); | label_18: 0x0042bbf3 cmp edx, 0x110000 | | if (edx >= 0x110000) { 0x0042bbf9 jae 0x42bcfc | goto label_27; | } 0x0042bbff cmp r13, 2 | | if (r13 <= 2) { 0x0042bc03 jbe 0x42c177 | goto label_11; | } 0x0042bc09 lea ebx, [rdx + 0xff0000] | ebx = rdx + 0xff0000; 0x0042bc0f shr ebx, 0xa | ebx >>= 0xa; 0x0042bc12 or ebx, 0xd800 | ebx |= 0xd800; 0x0042bc18 rol bx, 8 | bx = rotate_left16 (bx, 8); 0x0042bc1c and edx, 0x3ff | edx &= 0x3ff; 0x0042bc22 or edx, 0xdc00 | edx |= 0xdc00; 0x0042bc28 rol dx, 8 | dx = rotate_left16 (dx, 8); 0x0042bc2c mov word [r12 + r14*2], bx | *((r12 + r14*2)) = bx; 0x0042bc31 mov word [r12 + r14*2 + 2], dx | *((r12 + r14*2 + 2)) = dx; 0x0042bc37 mov rdx, 0xfffffffffffffffe | rdx = 0xfffffffffffffffe; 0x0042bc3e mov ebx, 2 | ebx = 2; 0x0042bc43 jmp 0x42bd45 | goto label_28; | label_17: 0x0042bc48 cmp rbp, r11 | | if (rbp >= r11) { 0x0042bc4b jae 0x42bcef | goto label_22; | } 0x0042bc51 movzx ebx, word [rsp - 0x10] | ebx = *((rsp - 0x10)); | do { 0x0042bc56 movzx edx, byte [rbp] | edx = *(rbp); 0x0042bc5a and dl, 0xc0 | dl &= 0xc0; 0x0042bc5d cmp dl, 0x80 | | if (dl != 0x80) { 0x0042bc60 jne 0x42bcf9 | goto label_23; | } 0x0042bc66 inc rbp | rbp++; 0x0042bc69 cmp r11, rbp | 0x0042bc6c jne 0x42bc56 | | } while (r11 != rbp); 0x0042bc6e jmp 0x42bcea | goto label_24; | label_25: 0x0042bc70 lea rdi, [r15 + r14 + 5] | rdi = r15 + r14 + 5; 0x0042bc75 cmp rdi, r11 | 0x0042bc78 movzx ebx, word [rsp - 0x10] | ebx = *((rsp - 0x10)); | if (rdi <= r11) { 0x0042bc7d ja 0x42bcb1 | 0x0042bc7f mov dl, byte [rbp] | dl = *(rbp); 0x0042bc82 and dl, 0xc0 | dl &= 0xc0; 0x0042bc85 cmp dl, 0x80 | | if (dl != 0x80) { 0x0042bc88 jne 0x42bcb1 | goto label_29; | } 0x0042bc8a mov dl, byte [r15 + r14 + 2] | dl = *((r15 + r14 + 2)); 0x0042bc8f and dl, 0xc0 | dl &= 0xc0; 0x0042bc92 cmp dl, 0x80 | | if (dl != 0x80) { 0x0042bc95 jne 0x42bcb1 | goto label_29; | } 0x0042bc97 mov dl, byte [r15 + r14 + 3] | dl = *((r15 + r14 + 3)); 0x0042bc9c and dl, 0xc0 | dl &= 0xc0; 0x0042bc9f cmp dl, 0x80 | | if (dl != 0x80) { 0x0042bca2 jne 0x42bcb1 | goto label_29; | } 0x0042bca4 mov dl, byte [r15 + r14 + 4] | dl = *((r15 + r14 + 4)); 0x0042bca9 and dl, 0xc0 | dl &= 0xc0; 0x0042bcac cmp dl, 0x80 | | if (dl == 0x80) { 0x0042bcaf je 0x42bcfc | goto label_27; | } | } | label_29: 0x0042bcb1 cmp rbp, r11 | | if (rbp >= r11) { 0x0042bcb4 jae 0x42bcf9 | goto label_23; | } | do { 0x0042bcb6 movzx edx, byte [rbp] | edx = *(rbp); 0x0042bcba and dl, 0xc0 | dl &= 0xc0; 0x0042bcbd cmp dl, 0x80 | | if (dl != 0x80) { 0x0042bcc0 jne 0x42bcf9 | goto label_23; | } 0x0042bcc2 inc rbp | rbp++; 0x0042bcc5 cmp r11, rbp | 0x0042bcc8 jne 0x42bcb6 | | } while (r11 != rbp); 0x0042bcca jmp 0x42bcea | goto label_24; | label_26: 0x0042bccc cmp rbp, r11 | | if (rbp >= r11) { 0x0042bccf jae 0x42bcef | goto label_22; | } 0x0042bcd1 movzx ebx, word [rsp - 0x10] | ebx = *((rsp - 0x10)); | do { 0x0042bcd6 movzx edx, byte [rbp] | edx = *(rbp); 0x0042bcda and dl, 0xc0 | dl &= 0xc0; 0x0042bcdd cmp dl, 0x80 | | if (dl != 0x80) { 0x0042bce0 jne 0x42bcf9 | goto label_23; | } 0x0042bce2 inc rbp | rbp++; 0x0042bce5 cmp r11, rbp | 0x0042bce8 jne 0x42bcd6 | | } while (r11 != rbp); | label_24: 0x0042bcea mov rdi, r11 | rdi = r11; 0x0042bced jmp 0x42bcfc | goto label_27; | label_22: 0x0042bcef mov rdi, rbp | rdi = rbp; 0x0042bcf2 movzx ebx, word [rsp - 0x10] | ebx = *((rsp - 0x10)); 0x0042bcf7 jmp 0x42bcfc | goto label_27; | label_23: 0x0042bcf9 mov rdi, rbp | rdi = rbp; | label_27: 0x0042bcfc or eax, 1 | eax |= 1; 0x0042bcff test r9w, r9w | | if (r9w != 0) { 0x0042bd03 je 0x42bd12 | | label_20: 0x0042bd05 add rsi, 2 | rsi += 2; 0x0042bd09 mov word [r12 + r14*2], bx | *((r12 + r14*2)) = bx; 0x0042bd0e paddq xmm0, xmm1 | __asm ("paddq xmm0, xmm1"); | } | label_21: 0x0042bd12 mov r12, rsi | r12 = rsi; | label_2: 0x0042bd15 mov r15, rdi | r15 = rdi; 0x0042bd18 cmp rdi, r11 | | if (rdi < r11) { 0x0042bd1b jb 0x42b9b6 | goto label_1; | } 0x0042bd21 jmp 0x42c1e7 | goto label_30; | label_19: 0x0042bd26 cmp r13, 1 | | if (r13 <= 1) { 0x0042bd2a jbe 0x42c177 | goto label_11; | } 0x0042bd30 rol dx, 8 | dx = rotate_left16 (dx, 8); 0x0042bd34 mov word [r12 + r14*2], dx | *((r12 + r14*2)) = dx; 0x0042bd39 mov rdx, 0xffffffffffffffff | rdx = 0xffffffffffffffff; 0x0042bd40 mov ebx, 1 | ebx = 1; | label_28: 0x0042bd45 lea r12, [rsi + rbx*2] | r12 = rsi + rbx*2; 0x0042bd49 movdqa xmm3, xmm2 | __asm ("movdqa xmm3, xmm2"); 0x0042bd4d pinsrq xmm3, rdx, 0 | __asm ("pinsrq xmm3, rdx, 0"); 0x0042bd54 paddq xmm0, xmm3 | __asm ("paddq xmm0, xmm3"); 0x0042bd58 movzx ebx, word [rsp - 0x10] | ebx = *((rsp - 0x10)); 0x0042bd5d jmp 0x42bd15 | goto label_2; | label_8: 0x0042bd5f test rsi, rsi | | if (rsi == 0) { 0x0042bd62 je 0x42c142 | goto label_9; | } 0x0042bd68 test rax, rax | | if (rax <= 0) { 0x0042bd6b jle 0x42c16e | goto label_31; | } 0x0042bd71 movq xmm0, rsi | xmm0 = rsi; 0x0042bd76 xor eax, eax | eax = 0; 0x0042bd78 movdqa xmm1, xmmword [rip + 0x3f930] | __asm ("movdqa xmm1, xmmword [0x0046b6b0]"); 0x0042bd80 movdqa xmm2, xmmword [rip + 0x3f938] | __asm ("movdqa xmm2, xmmword [0x0046b6c0]"); 0x0042bd88 mov rdi, r10 | rdi = r10; | label_3: 0x0042bd8b movq rdx, xmm0 | rdx = xmm0; 0x0042bd90 pextrq rbp, xmm0, 1 | __asm ("pextrq rbp, xmm0, 1"); 0x0042bd97 add rbp, rdx | rbp += rdx; 0x0042bd9a cmp rdx, 1 | 0x0042bd9e adc rbp, 0xffffffffffffffff | rbp += 0xffffffffffffffff; 0x0042bda2 xor ebx, ebx | ebx = 0; 0x0042bda4 mov r14, rdi | r14 = rdi; 0x0042bda7 nop word [rax + rax] | | do { 0x0042bdb0 movq r12, xmm0 | r12 = xmm0; 0x0042bdb5 test r9w, r9w | | if (r9w != 0) { 0x0042bdb9 je 0x42bdc5 | 0x0042bdbb cmp r12, 1 | | if (r12 <= 1) { 0x0042bdbf jbe 0x42c1aa | goto label_32; | } | } 0x0042bdc5 movzx esi, byte [r15 + rbx] | esi = *((r15 + rbx)); 0x0042bdca test sil, sil | | if (sil < 0) { 0x0042bdcd js 0x42bdfd | goto label_33; | } 0x0042bdcf pextrq rdx, xmm0, 1 | __asm ("pextrq rdx, xmm0, 1"); 0x0042bdd6 cmp rdx, rbp | | if (rdx == rbp) { 0x0042bdd9 je 0x42c1b6 | goto label_34; | } 0x0042bddf mov word [rdi + rbx*2], si | *((rdi + rbx*2)) = si; 0x0042bde3 add r14, 2 | r14 += 2; 0x0042bde7 paddq xmm0, xmm1 | __asm ("paddq xmm0, xmm1"); 0x0042bdeb lea rdx, [r15 + rbx + 1] | rdx = r15 + rbx + 1; 0x0042bdf0 inc rbx | rbx++; 0x0042bdf3 cmp rdx, r11 | 0x0042bdf6 jb 0x42bdb0 | | } while (rdx < r11); 0x0042bdf8 jmp 0x42c1ad | goto label_35; | label_33: 0x0042bdfd mov edx, esi | edx = esi; 0x0042bdff and dl, 0xe0 | dl &= 0xe0; 0x0042be02 cmp dl, 0xc0 | | if (dl == 0xc0) { 0x0042be05 jne 0x42be86 | 0x0042be07 lea rbp, [r15 + rbx + 1] | rbp = r15 + rbx + 1; 0x0042be0c lea r13, [r15 + rbx + 2] | r13 = r15 + rbx + 2; 0x0042be11 cmp r13, r11 | | if (r13 > r11) { 0x0042be14 ja 0x42bf1c | goto label_36; | } 0x0042be1a movzx r15d, byte [rbp] | r15d = *(rbp); 0x0042be1f mov edx, r15d | edx = r15d; 0x0042be22 and dl, 0xc0 | dl &= 0xc0; 0x0042be25 cmp dl, 0x80 | | if (dl != 0x80) { 0x0042be28 jne 0x42bf1c | goto label_36; | } 0x0042be2e and r15d, 0x3f | r15d &= 0x3f; 0x0042be32 and esi, 0x1f | esi &= 0x1f; 0x0042be35 shl esi, 6 | esi <<= 6; 0x0042be38 or esi, r15d | esi |= r15d; 0x0042be3b cmp esi, 0x80 | | if (esi < 0x80) { 0x0042be41 jb 0x42c086 | goto label_6; | } 0x0042be47 cmp esi, 0xffff | | if (esi > 0xffff) { 0x0042be4d ja 0x42c0e8 | goto label_37; | } | label_5: 0x0042be53 mov edx, esi | edx = esi; 0x0042be55 and edx, 0xf800 | edx &= 0xf800; 0x0042be5b cmp edx, 0xd800 | | if (edx == 0xd800) { 0x0042be61 je 0x42c086 | goto label_6; | } 0x0042be67 cmp r12, 1 | | if (r12 <= 1) { 0x0042be6b jbe 0x42c1aa | goto label_32; | } 0x0042be71 mov word [rdi + rbx*2], si | *((rdi + rbx*2)) = si; 0x0042be75 mov rsi, 0xffffffffffffffff | rsi = 0xffffffffffffffff; 0x0042be7c mov ebx, 1 | ebx = 1; 0x0042be81 jmp 0x42c12a | goto label_38; | } 0x0042be86 mov edx, esi | edx = esi; 0x0042be88 and dl, 0xf0 | dl &= 0xf0; 0x0042be8b cmp dl, 0xe0 | | if (dl != 0xe0) { 0x0042be8e jne 0x42bf42 | goto label_39; | } 0x0042be94 lea rbp, [r15 + rbx + 1] | rbp = r15 + rbx + 1; 0x0042be99 lea rdx, [r15 + rbx + 3] | rdx = r15 + rbx + 3; 0x0042be9e mov qword [rsp - 0x10], rdx | *((rsp - 0x10)) = rdx; 0x0042bea3 cmp rdx, r11 | | if (rdx > r11) { 0x0042bea6 ja 0x42bfea | goto label_40; | } 0x0042beac movzx r13d, byte [rbp] | r13d = *(rbp); 0x0042beb1 mov edx, r13d | edx = r13d; 0x0042beb4 and dl, 0xc0 | dl &= 0xc0; 0x0042beb7 cmp dl, 0x80 | | if (dl != 0x80) { 0x0042beba jne 0x42bfea | goto label_40; | } 0x0042bec0 movzx r15d, byte [r15 + rbx + 2] | r15d = *((r15 + rbx + 2)); 0x0042bec6 mov edx, r15d | edx = r15d; 0x0042bec9 and dl, 0xc0 | dl &= 0xc0; 0x0042becc cmp dl, 0x80 | | if (dl != 0x80) { 0x0042becf jne 0x42bfea | goto label_40; | } 0x0042bed5 and r15d, 0x3f | r15d &= 0x3f; 0x0042bed9 and r13d, 0x3f | r13d &= 0x3f; 0x0042bedd shl r13d, 6 | r13d <<= 6; 0x0042bee1 and esi, 0xf | esi &= 0xf; 0x0042bee4 shl esi, 0xc | esi <<= 0xc; 0x0042bee7 or esi, r13d | esi |= r13d; 0x0042beea or esi, r15d | esi |= r15d; 0x0042beed cmp esi, 0x800 | | if (esi >= 0x800) { 0x0042bef3 jae 0x42c0d1 | goto label_41; | } 0x0042bef9 or eax, 1 | eax |= 1; 0x0042befc test r9w, r9w | | if (r9w != 0) { 0x0042bf00 je 0x42bf0f | 0x0042bf02 add r14, 2 | r14 += 2; 0x0042bf06 mov word [rdi + rbx*2], r9w | *((rdi + rbx*2)) = r9w; 0x0042bf0b paddq xmm0, xmm1 | __asm ("paddq xmm0, xmm1"); | } 0x0042bf0f mov rdi, r14 | rdi = r14; 0x0042bf12 mov r13, qword [rsp - 0x10] | r13 = *((rsp - 0x10)); 0x0042bf17 jmp 0x42c09f | goto label_4; | label_36: 0x0042bf1c cmp rbp, r11 | | if (rbp >= r11) { 0x0042bf1f jae 0x42c005 | goto label_42; | } | do { 0x0042bf25 movzx edx, byte [rbp] | edx = *(rbp); 0x0042bf29 and dl, 0xc0 | dl &= 0xc0; 0x0042bf2c cmp dl, 0x80 | | if (dl != 0x80) { 0x0042bf2f jne 0x42c005 | goto label_42; | } 0x0042bf35 inc rbp | rbp++; 0x0042bf38 cmp r11, rbp | 0x0042bf3b jne 0x42bf25 | | } while (r11 != rbp); 0x0042bf3d jmp 0x42c083 | goto label_43; | label_39: 0x0042bf42 mov edx, esi | edx = esi; 0x0042bf44 and dl, 0xf8 | dl &= 0xf8; 0x0042bf47 lea r13, [r15 + rbx + 1] | r13 = r15 + rbx + 1; 0x0042bf4c cmp dl, 0xf0 | | if (dl != 0xf0) { 0x0042bf4f jne 0x42c00a | goto label_44; | } 0x0042bf55 lea rdx, [r15 + rbx + 4] | rdx = r15 + rbx + 4; 0x0042bf5a mov qword [rsp - 0x10], rdx | *((rsp - 0x10)) = rdx; 0x0042bf5f cmp rdx, r11 | | if (rdx > r11) { 0x0042bf62 ja 0x42c069 | goto label_45; | } 0x0042bf68 movzx ebp, byte [r13] | ebp = *(r13); 0x0042bf6d mov edx, ebp | edx = ebp; 0x0042bf6f and dl, 0xc0 | dl &= 0xc0; 0x0042bf72 cmp dl, 0x80 | | if (dl != 0x80) { 0x0042bf75 jne 0x42c069 | goto label_45; | } 0x0042bf7b movzx edx, byte [r15 + rbx + 2] | edx = *((r15 + rbx + 2)); 0x0042bf81 mov dword [rsp - 8], edx | *((rsp - 8)) = edx; 0x0042bf85 and dl, 0xc0 | dl &= 0xc0; 0x0042bf88 cmp dl, 0x80 | | if (dl != 0x80) { 0x0042bf8b jne 0x42c069 | goto label_45; | } 0x0042bf91 movzx r15d, byte [r15 + rbx + 3] | r15d = *((r15 + rbx + 3)); 0x0042bf97 mov edx, r15d | edx = r15d; 0x0042bf9a and dl, 0xc0 | dl &= 0xc0; 0x0042bf9d cmp dl, 0x80 | | if (dl != 0x80) { 0x0042bfa0 jne 0x42c069 | goto label_45; | } 0x0042bfa6 and r15d, 0x3f | r15d &= 0x3f; 0x0042bfaa mov edx, dword [rsp - 8] | edx = *((rsp - 8)); 0x0042bfae and edx, 0x3f | edx &= 0x3f; 0x0042bfb1 shl edx, 6 | edx <<= 6; 0x0042bfb4 and ebp, 0x3f | ebp &= 0x3f; 0x0042bfb7 shl ebp, 0xc | ebp <<= 0xc; 0x0042bfba and esi, 7 | esi &= 7; 0x0042bfbd shl esi, 0x12 | esi <<= 0x12; 0x0042bfc0 or esi, ebp | esi |= ebp; 0x0042bfc2 or esi, edx | esi |= edx; 0x0042bfc4 or esi, r15d | esi |= r15d; 0x0042bfc7 cmp esi, 0x10000 | | if (esi >= 0x10000) { 0x0042bfcd jae 0x42c0e3 | goto label_46; | } 0x0042bfd3 or eax, 1 | eax |= 1; 0x0042bfd6 test r9w, r9w | 0x0042bfda mov r13, qword [rsp - 0x10] | r13 = *((rsp - 0x10)); | if (r9w != 0) { 0x0042bfdf jne 0x42c08f | goto label_47; | } 0x0042bfe5 jmp 0x42c09c | goto label_48; | label_40: 0x0042bfea cmp rbp, r11 | | if (rbp >= r11) { 0x0042bfed jae 0x42c005 | goto label_42; | } | do { 0x0042bfef movzx edx, byte [rbp] | edx = *(rbp); 0x0042bff3 and dl, 0xc0 | dl &= 0xc0; 0x0042bff6 cmp dl, 0x80 | | if (dl != 0x80) { 0x0042bff9 jne 0x42c005 | goto label_42; | } 0x0042bffb inc rbp | rbp++; 0x0042bffe cmp r11, rbp | 0x0042c001 jne 0x42bfef | | } while (r11 != rbp); 0x0042c003 jmp 0x42c083 | goto label_43; | label_42: 0x0042c005 mov r13, rbp | r13 = rbp; 0x0042c008 jmp 0x42c086 | goto label_6; | label_44: 0x0042c00a lea rdx, [r15 + rbx + 5] | rdx = r15 + rbx + 5; 0x0042c00f cmp rdx, r11 | | if (rdx <= r11) { 0x0042c012 ja 0x42c04a | 0x0042c014 mov rsi, rdx | rsi = rdx; 0x0042c017 mov dl, byte [r13] | dl = *(r13); 0x0042c01b and dl, 0xc0 | dl &= 0xc0; 0x0042c01e cmp dl, 0x80 | | if (dl != 0x80) { 0x0042c021 jne 0x42c04a | goto label_49; | } 0x0042c023 mov dl, byte [r15 + rbx + 2] | dl = *((r15 + rbx + 2)); 0x0042c028 and dl, 0xc0 | dl &= 0xc0; 0x0042c02b cmp dl, 0x80 | | if (dl != 0x80) { 0x0042c02e jne 0x42c04a | goto label_49; | } 0x0042c030 mov dl, byte [r15 + rbx + 3] | dl = *((r15 + rbx + 3)); 0x0042c035 and dl, 0xc0 | dl &= 0xc0; 0x0042c038 cmp dl, 0x80 | | if (dl != 0x80) { 0x0042c03b jne 0x42c04a | goto label_49; | } 0x0042c03d mov dl, byte [r15 + rbx + 4] | dl = *((r15 + rbx + 4)); 0x0042c042 and dl, 0xc0 | dl &= 0xc0; 0x0042c045 cmp dl, 0x80 | | if (dl == 0x80) { 0x0042c048 je 0x42c0b3 | goto label_50; | } | } | label_49: 0x0042c04a cmp r13, r11 | | if (r13 >= r11) { 0x0042c04d jae 0x42c0b0 | goto label_51; | } | do { 0x0042c04f movzx edx, byte [r13] | edx = *(r13); 0x0042c054 and dl, 0xc0 | dl &= 0xc0; 0x0042c057 cmp dl, 0x80 | | if (dl != 0x80) { 0x0042c05a jne 0x42c0b0 | goto label_51; | } 0x0042c05c inc r13 | r13++; 0x0042c05f cmp r11, r13 | 0x0042c062 jne 0x42c04f | | } while (r11 != r13); 0x0042c064 mov rsi, r11 | rsi = r11; 0x0042c067 jmp 0x42c0b3 | goto label_50; | label_45: 0x0042c069 cmp r13, r11 | | if (r13 >= r11) { 0x0042c06c jae 0x42c086 | goto label_6; | } | do { 0x0042c06e movzx edx, byte [r13] | edx = *(r13); 0x0042c073 and dl, 0xc0 | dl &= 0xc0; 0x0042c076 cmp dl, 0x80 | | if (dl != 0x80) { 0x0042c079 jne 0x42c086 | goto label_6; | } 0x0042c07b inc r13 | r13++; 0x0042c07e cmp r11, r13 | 0x0042c081 jne 0x42c06e | | } while (r11 != r13); | label_43: 0x0042c083 mov r13, r11 | r13 = r11; | label_6: 0x0042c086 or eax, 1 | eax |= 1; 0x0042c089 test r9w, r9w | | if (r9w != 0) { 0x0042c08d je 0x42c09c | | label_47: 0x0042c08f add r14, 2 | r14 += 2; 0x0042c093 mov word [rdi + rbx*2], r9w | *((rdi + rbx*2)) = r9w; 0x0042c098 paddq xmm0, xmm1 | __asm ("paddq xmm0, xmm1"); | } | label_48: 0x0042c09c mov rdi, r14 | rdi = r14; | label_4: 0x0042c09f mov r15, r13 | r15 = r13; 0x0042c0a2 cmp r13, r11 | | if (r13 < r11) { 0x0042c0a5 jb 0x42bd8b | goto label_3; | } 0x0042c0ab jmp 0x42c1f3 | goto label_52; | label_51: 0x0042c0b0 mov rsi, r13 | rsi = r13; | label_50: 0x0042c0b3 or eax, 1 | eax |= 1; 0x0042c0b6 test r9w, r9w | | if (r9w != 0) { 0x0042c0ba je 0x42c0c9 | 0x0042c0bc add r14, 2 | r14 += 2; 0x0042c0c0 mov word [rdi + rbx*2], r9w | *((rdi + rbx*2)) = r9w; 0x0042c0c5 paddq xmm0, xmm1 | __asm ("paddq xmm0, xmm1"); | } 0x0042c0c9 mov rdi, r14 | rdi = r14; 0x0042c0cc mov r13, rsi | r13 = rsi; 0x0042c0cf jmp 0x42c09f | goto label_4; | label_41: 0x0042c0d1 mov r13, qword [rsp - 0x10] | r13 = *((rsp - 0x10)); 0x0042c0d6 cmp esi, 0xffff | | if (esi <= 0xffff) { 0x0042c0dc ja 0x42c0e8 | 0x0042c0de jmp 0x42be53 | goto label_5; | label_46: 0x0042c0e3 mov r13, qword [rsp - 0x10] | r13 = *((rsp - 0x10)); | } | label_37: 0x0042c0e8 cmp esi, 0x110000 | | if (esi >= 0x110000) { 0x0042c0ee jae 0x42c086 | goto label_6; | } 0x0042c0f0 cmp r12, 2 | | if (r12 <= 2) { 0x0042c0f4 jbe 0x42c1aa | goto label_32; | } 0x0042c0fa lea edx, [rsi + 0xff0000] | edx = rsi + 0xff0000; 0x0042c100 shr edx, 0xa | edx >>= 0xa; 0x0042c103 or edx, 0xd800 | edx |= 0xd800; 0x0042c109 mov word [rdi + rbx*2], dx | *((rdi + rbx*2)) = dx; 0x0042c10d and esi, 0x3ff | esi &= 0x3ff; 0x0042c113 or esi, 0xdc00 | esi |= 0xdc00; 0x0042c119 mov word [rdi + rbx*2 + 2], si | *((rdi + rbx*2 + 2)) = si; 0x0042c11e mov rsi, 0xfffffffffffffffe | rsi = 0xfffffffffffffffe; 0x0042c125 mov ebx, 2 | ebx = 2; | label_38: 0x0042c12a lea rdi, [r14 + rbx*2] | rdi = r14 + rbx*2; 0x0042c12e movdqa xmm3, xmm2 | __asm ("movdqa xmm3, xmm2"); 0x0042c132 pinsrq xmm3, rsi, 0 | __asm ("pinsrq xmm3, rsi, 0"); 0x0042c139 paddq xmm0, xmm3 | __asm ("paddq xmm0, xmm3"); 0x0042c13d jmp 0x42c09f | goto label_4; | label_9: 0x0042c142 test rcx, rcx | | if (rcx != 0) { 0x0042c145 je 0x42c14e | 0x0042c147 mov qword [rcx], 0 | *(rcx) = 0; | } 0x0042c14e mov eax, 2 | eax = 2; 0x0042c153 test r8, r8 | | if (r8 == 0) { 0x0042c156 je 0x42c1dc | goto label_53; | } 0x0042c15c mov qword [r8], 0 | *(r8) = 0; 0x0042c163 jmp 0x42c1dc | goto label_53; | label_10: 0x0042c165 xor ebp, ebp | ebp = 0; 0x0042c167 mov rsi, r10 | rsi = r10; 0x0042c16a xor eax, eax | eax = 0; 0x0042c16c jmp 0x42c186 | goto label_54; | label_31: 0x0042c16e xor ebp, ebp | ebp = 0; 0x0042c170 mov r14, r10 | r14 = r10; 0x0042c173 xor eax, eax | eax = 0; 0x0042c175 jmp 0x42c1b9 | goto label_7; | label_11: 0x0042c177 or eax, 2 | eax |= 2; | label_14: 0x0042c17a pextrq rbp, xmm0, 1 | __asm ("pextrq rbp, xmm0, 1"); 0x0042c181 jmp 0x42c186 | goto label_54; | label_13: 0x0042c183 or eax, 2 | eax |= 2; | do { | label_54: 0x0042c186 mov word [rsi], 0 | *(rsi) = 0; 0x0042c18b test rcx, rcx | | if (rcx != 0) { 0x0042c18e je 0x42c196 | 0x0042c190 inc rbp | rbp++; 0x0042c193 mov qword [rcx], rbp | *(rcx) = rbp; | } 0x0042c196 test r8, r8 | | if (r8 != 0) { 0x0042c199 je 0x42c1dc | 0x0042c19b add rsi, 2 | rsi += 2; 0x0042c19f sub rsi, r10 | rsi -= r10; 0x0042c1a2 sar rsi, 1 | rsi >>= 1; 0x0042c1a5 mov qword [r8], rsi | *(r8) = rsi; 0x0042c1a8 jmp 0x42c1dc | goto label_53; | label_32: 0x0042c1aa or eax, 2 | eax |= 2; | label_35: 0x0042c1ad pextrq rbp, xmm0, 1 | __asm ("pextrq rbp, xmm0, 1"); 0x0042c1b4 jmp 0x42c1b9 | goto label_7; | label_34: 0x0042c1b6 or eax, 2 | eax |= 2; | label_7: 0x0042c1b9 mov word [r14], 0 | *(r14) = 0; 0x0042c1bf test rcx, rcx | | if (rcx != 0) { 0x0042c1c2 je 0x42c1ca | 0x0042c1c4 inc rbp | rbp++; 0x0042c1c7 mov qword [rcx], rbp | *(rcx) = rbp; | } 0x0042c1ca test r8, r8 | | if (r8 == 0) { 0x0042c1cd je 0x42c1dc | goto label_53; | } 0x0042c1cf add r14, 2 | r14 += 2; 0x0042c1d3 sub r14, r10 | r14 -= r10; 0x0042c1d6 sar r14, 1 | r14 >>= 1; 0x0042c1d9 mov qword [r8], r14 | *(r8) = r14; | } | label_53: 0x0042c1dc pop rbx | 0x0042c1dd pop r12 | r12 = rbx; 0x0042c1df pop r13 | r13 = rbx; 0x0042c1e1 pop r14 | r14 = rbx; 0x0042c1e3 pop r15 | r15 = rbx; 0x0042c1e5 pop rbp | 0x0042c1e6 ret | return rax; | label_30: 0x0042c1e7 pextrq rbp, xmm0, 1 | __asm ("pextrq rbp, xmm0, 1"); 0x0042c1ee mov rsi, r12 | rsi = r12; 0x0042c1f1 jmp 0x42c186 | | } while (1); | label_52: 0x0042c1f3 pextrq rbp, xmm0, 1 | __asm ("pextrq rbp, xmm0, 1"); 0x0042c1fa mov r14, rdi | r14 = rdi; 0x0042c1fd jmp 0x42c1b9 | goto label_7; | }