; assembly | /* r2dec pseudo code output */ | /* bdlde_charconvertutf16.t/assume @ 0x42b9e0 */ | #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, uint32_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) */ 0x0042b9e0 push rbp | 0x0042b9e1 push r15 | 0x0042b9e3 push r14 | 0x0042b9e5 push r13 | 0x0042b9e7 push r12 | 0x0042b9e9 push rbx | 0x0042b9ea mov r15, qword [rdx] | r15 = *(rdx); 0x0042b9ed mov rax, qword [rdx + 8] | rax = *((rdx + 8)); 0x0042b9f1 lea r11, [r15 + rax] | r11 = r15 + rax; 0x0042b9f5 cmp dword [rsp + 0x38], 0 | | if (*((rsp + 0x38)) == 0) { 0x0042b9fa je 0x42be03 | goto label_8; | } 0x0042ba00 test rsi, rsi | | if (rsi == 0) { 0x0042ba03 je 0x42c1ed | goto label_9; | } 0x0042ba09 test rax, rax | | if (rax <= 0) { 0x0042ba0c jle 0x42c210 | goto label_10; | } 0x0042ba12 mov r10d, r9d | r10d = r9d; 0x0042ba15 rol r10w, 8 | r10w = rotate_left16 (r10w, 8); 0x0042ba1a movq xmm0, rsi | xmm0 = rsi; 0x0042ba1f xor eax, eax | eax = 0; 0x0042ba21 movdqa xmm1, xmmword [rip + 0x3fe87] | __asm ("movdqa xmm1, xmmword [0x0046b8b0]"); 0x0042ba29 movdqa xmm2, xmmword [rip + 0x3fe8f] | __asm ("movdqa xmm2, xmmword [0x0046b8c0]"); 0x0042ba31 mov r12, rdi | r12 = rdi; | label_1: 0x0042ba34 movq rdx, xmm0 | rdx = xmm0; 0x0042ba39 pextrq rbp, xmm0, 1 | __asm ("pextrq rbp, xmm0, 1"); 0x0042ba40 add rbp, rdx | rbp += rdx; 0x0042ba43 cmp rdx, 1 | 0x0042ba47 adc rbp, 0xffffffffffffffff | rbp += 0xffffffffffffffff; 0x0042ba4b xor r14d, r14d | r14d = 0; 0x0042ba4e mov rsi, r12 | rsi = r12; 0x0042ba51 nop word cs:[rax + rax] | 0x0042ba5b nop dword [rax + rax] | | do { 0x0042ba60 movq r13, xmm0 | r13 = xmm0; 0x0042ba65 test r9w, r9w | | if (r9w != 0) { 0x0042ba69 je 0x42ba75 | 0x0042ba6b cmp r13, 1 | | if (r13 <= 1) { 0x0042ba6f jbe 0x42c222 | goto label_11; | } | } 0x0042ba75 movzx edx, byte [r15 + r14] | edx = *((r15 + r14)); 0x0042ba7a test dl, dl | | if (dl < 0) { 0x0042ba7c js 0x42bab1 | goto label_12; | } 0x0042ba7e pextrq rbx, xmm0, 1 | __asm ("pextrq rbx, xmm0, 1"); 0x0042ba85 cmp rbx, rbp | | if (rbx == rbp) { 0x0042ba88 je 0x42c22e | goto label_13; | } 0x0042ba8e rol dx, 8 | dx = rotate_left16 (dx, 8); 0x0042ba92 mov word [r12 + r14*2], dx | *((r12 + r14*2)) = dx; 0x0042ba97 add rsi, 2 | rsi += 2; 0x0042ba9b paddq xmm0, xmm1 | __asm ("paddq xmm0, xmm1"); 0x0042ba9f lea rdx, [r15 + r14 + 1] | rdx = r15 + r14 + 1; 0x0042baa4 inc r14 | r14++; 0x0042baa7 cmp rdx, r11 | 0x0042baaa jb 0x42ba60 | | } while (rdx < r11); 0x0042baac jmp 0x42c225 | goto label_14; | label_12: 0x0042bab1 mov qword [rsp - 0x18], rdi | *((rsp - 0x18)) = rdi; 0x0042bab6 mov ebx, edx | ebx = edx; 0x0042bab8 and bl, 0xe0 | bl &= 0xe0; 0x0042babb cmp bl, 0xc0 | 0x0042babe mov qword [rsp - 0x10], r8 | *((rsp - 0x10)) = r8; | if (bl != 0xc0) { 0x0042bac3 jne 0x42bb38 | goto label_15; | } 0x0042bac5 lea rbp, [r15 + r14 + 1] | rbp = r15 + r14 + 1; 0x0042baca lea r8, [r15 + r14 + 2] | r8 = r15 + r14 + 2; 0x0042bacf cmp r8, r11 | | if (r8 > r11) { 0x0042bad2 ja 0x42bbc3 | goto label_16; | } 0x0042bad8 movzx r15d, byte [rbp] | r15d = *(rbp); 0x0042badd mov ebx, r15d | ebx = r15d; 0x0042bae0 and bl, 0xc0 | bl &= 0xc0; 0x0042bae3 cmp bl, 0x80 | | if (bl != 0x80) { 0x0042bae6 jne 0x42bbc3 | goto label_16; | } 0x0042baec and r15d, 0x3f | r15d &= 0x3f; 0x0042baf0 and edx, 0x1f | edx &= 0x1f; 0x0042baf3 shl edx, 6 | edx <<= 6; 0x0042baf6 or edx, r15d | edx |= r15d; 0x0042baf9 cmp edx, 0x80 | 0x0042baff jb 0x42bb21 | | while (edx >= 0x800) { 0x0042bb01 cmp edx, 0xffff | | if (edx > 0xffff) { 0x0042bb07 ja 0x42bc88 | goto label_17; | } 0x0042bb0d mov ebx, edx | ebx = edx; 0x0042bb0f and ebx, 0xf800 | ebx &= 0xf800; 0x0042bb15 cmp ebx, 0xd800 | | if (ebx != 0xd800) { 0x0042bb1b jne 0x42bdc5 | goto label_18; | } | label_0: 0x0042bb21 or eax, 1 | eax |= 1; 0x0042bb24 test r9w, r9w | 0x0042bb28 mov rdi, qword [rsp - 0x18] | rdi = *((rsp - 0x18)); | if (r9w != 0) { 0x0042bb2d jne 0x42bd9f | goto label_19; | } 0x0042bb33 jmp 0x42bdac | goto label_20; | label_15: 0x0042bb38 mov ebx, edx | ebx = edx; 0x0042bb3a and bl, 0xf0 | bl &= 0xf0; 0x0042bb3d cmp bl, 0xe0 | | if (bl != 0xe0) { 0x0042bb40 jne 0x42bbfd | goto label_21; | } 0x0042bb46 lea rbp, [r15 + r14 + 1] | rbp = r15 + r14 + 1; 0x0042bb4b lea r8, [r15 + r14 + 3] | r8 = r15 + r14 + 3; 0x0042bb50 cmp r8, r11 | | if (r8 > r11) { 0x0042bb53 ja 0x42bce2 | goto label_22; | } 0x0042bb59 movzx edi, byte [rbp] | edi = *(rbp); 0x0042bb5d mov ebx, edi | ebx = edi; 0x0042bb5f and bl, 0xc0 | bl &= 0xc0; 0x0042bb62 cmp bl, 0x80 | | if (bl != 0x80) { 0x0042bb65 jne 0x42bce2 | goto label_22; | } 0x0042bb6b movzx r15d, byte [r15 + r14 + 2] | r15d = *((r15 + r14 + 2)); 0x0042bb71 mov ebx, r15d | ebx = r15d; 0x0042bb74 and bl, 0xc0 | bl &= 0xc0; 0x0042bb77 cmp bl, 0x80 | | if (bl != 0x80) { 0x0042bb7a jne 0x42bce2 | goto label_22; | } 0x0042bb80 and r15d, 0x3f | r15d &= 0x3f; 0x0042bb84 and edi, 0x3f | edi &= 0x3f; 0x0042bb87 shl edi, 6 | edi <<= 6; 0x0042bb8a and edx, 0xf | edx &= 0xf; 0x0042bb8d shl edx, 0xc | edx <<= 0xc; 0x0042bb90 or edx, edi | edx |= edi; 0x0042bb92 or edx, r15d | edx |= r15d; 0x0042bb95 cmp edx, 0x800 | 0x0042bb9b jae 0x42bb01 | | } 0x0042bba1 or eax, 1 | eax |= 1; 0x0042bba4 test r9w, r9w | | if (r9w == 0) { 0x0042bba8 je 0x42bdfe | goto label_23; | } 0x0042bbae add rsi, 2 | rsi += 2; 0x0042bbb2 mov word [r12 + r14*2], r10w | *((r12 + r14*2)) = r10w; 0x0042bbb7 paddq xmm0, xmm1 | __asm ("paddq xmm0, xmm1"); 0x0042bbbb mov r12, rsi | r12 = rsi; 0x0042bbbe jmp 0x42bdf7 | goto label_24; | label_16: 0x0042bbc3 cmp rbp, r11 | | if (rbp >= r11) { 0x0042bbc6 jae 0x42bd89 | goto label_25; | } 0x0042bbcc mov rdi, qword [rsp - 0x18] | rdi = *((rsp - 0x18)); 0x0042bbd1 nop word cs:[rax + rax] | 0x0042bbdb nop dword [rax + rax] | | do { 0x0042bbe0 movzx edx, byte [rbp] | edx = *(rbp); 0x0042bbe4 and dl, 0xc0 | dl &= 0xc0; 0x0042bbe7 cmp dl, 0x80 | | if (dl != 0x80) { 0x0042bbea jne 0x42bd93 | goto label_26; | } 0x0042bbf0 inc rbp | rbp++; 0x0042bbf3 cmp r11, rbp | 0x0042bbf6 jne 0x42bbe0 | | } while (r11 != rbp); 0x0042bbf8 jmp 0x42bd84 | goto label_27; | label_21: 0x0042bbfd mov ebx, edx | ebx = edx; 0x0042bbff and bl, 0xf8 | bl &= 0xf8; 0x0042bc02 lea rbp, [r15 + r14 + 1] | rbp = r15 + r14 + 1; 0x0042bc07 cmp bl, 0xf0 | | if (bl != 0xf0) { 0x0042bc0a jne 0x42bd0a | goto label_28; | } 0x0042bc10 lea r8, [r15 + r14 + 4] | r8 = r15 + r14 + 4; 0x0042bc15 cmp r8, r11 | | if (r8 > r11) { 0x0042bc18 ja 0x42bd66 | goto label_29; | } 0x0042bc1e movzx edi, byte [rbp] | edi = *(rbp); 0x0042bc22 mov ebx, edi | ebx = edi; 0x0042bc24 and bl, 0xc0 | bl &= 0xc0; 0x0042bc27 cmp bl, 0x80 | | if (bl != 0x80) { 0x0042bc2a jne 0x42bd66 | goto label_29; | } 0x0042bc30 movzx ebx, byte [r15 + r14 + 2] | ebx = *((r15 + r14 + 2)); 0x0042bc36 mov dword [rsp - 4], ebx | *((rsp - 4)) = ebx; 0x0042bc3a and bl, 0xc0 | bl &= 0xc0; 0x0042bc3d cmp bl, 0x80 | | if (bl != 0x80) { 0x0042bc40 jne 0x42bd66 | goto label_29; | } 0x0042bc46 movzx r15d, byte [r15 + r14 + 3] | r15d = *((r15 + r14 + 3)); 0x0042bc4c mov ebx, r15d | ebx = r15d; 0x0042bc4f and bl, 0xc0 | bl &= 0xc0; 0x0042bc52 cmp bl, 0x80 | | if (bl != 0x80) { 0x0042bc55 jne 0x42bd66 | goto label_29; | } 0x0042bc5b and r15d, 0x3f | r15d &= 0x3f; 0x0042bc5f mov ebx, dword [rsp - 4] | ebx = *((rsp - 4)); 0x0042bc63 and ebx, 0x3f | ebx &= 0x3f; 0x0042bc66 shl ebx, 6 | ebx <<= 6; 0x0042bc69 and edi, 0x3f | edi &= 0x3f; 0x0042bc6c shl edi, 0xc | edi <<= 0xc; 0x0042bc6f and edx, 7 | edx &= 7; 0x0042bc72 shl edx, 0x12 | edx <<= 0x12; 0x0042bc75 or edx, edi | edx |= edi; 0x0042bc77 or edx, ebx | edx |= ebx; 0x0042bc79 or edx, r15d | edx |= r15d; 0x0042bc7c cmp edx, 0x10000 | | if (edx < 0x10000) { 0x0042bc82 jb 0x42bb21 | goto label_0; | } | label_17: 0x0042bc88 mov rdi, qword [rsp - 0x18] | rdi = *((rsp - 0x18)); 0x0042bc8d cmp edx, 0x110000 | | if (edx >= 0x110000) { 0x0042bc93 jae 0x42bd96 | goto label_30; | } 0x0042bc99 cmp r13, 2 | | if (r13 <= 2) { 0x0042bc9d jbe 0x42c2af | goto label_31; | } 0x0042bca3 lea ebx, [rdx + 0xff0000] | ebx = rdx + 0xff0000; 0x0042bca9 shr ebx, 0xa | ebx >>= 0xa; 0x0042bcac or ebx, 0xd800 | ebx |= 0xd800; 0x0042bcb2 rol bx, 8 | bx = rotate_left16 (bx, 8); 0x0042bcb6 and edx, 0x3ff | edx &= 0x3ff; 0x0042bcbc or edx, 0xdc00 | edx |= 0xdc00; 0x0042bcc2 rol dx, 8 | dx = rotate_left16 (dx, 8); 0x0042bcc6 mov word [r12 + r14*2], bx | *((r12 + r14*2)) = bx; 0x0042bccb mov word [r12 + r14*2 + 2], dx | *((r12 + r14*2 + 2)) = dx; 0x0042bcd1 mov rdx, 0xfffffffffffffffe | rdx = 0xfffffffffffffffe; 0x0042bcd8 mov ebx, 2 | ebx = 2; 0x0042bcdd jmp 0x42bde4 | goto label_32; | label_22: 0x0042bce2 cmp rbp, r11 | | if (rbp >= r11) { 0x0042bce5 jae 0x42bd89 | goto label_25; | } 0x0042bceb mov rdi, qword [rsp - 0x18] | rdi = *((rsp - 0x18)); | do { 0x0042bcf0 movzx edx, byte [rbp] | edx = *(rbp); 0x0042bcf4 and dl, 0xc0 | dl &= 0xc0; 0x0042bcf7 cmp dl, 0x80 | | if (dl != 0x80) { 0x0042bcfa jne 0x42bd93 | goto label_26; | } 0x0042bd00 inc rbp | rbp++; 0x0042bd03 cmp r11, rbp | 0x0042bd06 jne 0x42bcf0 | | } while (r11 != rbp); 0x0042bd08 jmp 0x42bd84 | goto label_27; | label_28: 0x0042bd0a lea r8, [r15 + r14 + 5] | r8 = r15 + r14 + 5; 0x0042bd0f cmp r8, r11 | 0x0042bd12 mov rdi, qword [rsp - 0x18] | rdi = *((rsp - 0x18)); | if (r8 <= r11) { 0x0042bd17 ja 0x42bd4b | 0x0042bd19 mov dl, byte [rbp] | dl = *(rbp); 0x0042bd1c and dl, 0xc0 | dl &= 0xc0; 0x0042bd1f cmp dl, 0x80 | | if (dl != 0x80) { 0x0042bd22 jne 0x42bd4b | goto label_33; | } 0x0042bd24 mov dl, byte [r15 + r14 + 2] | dl = *((r15 + r14 + 2)); 0x0042bd29 and dl, 0xc0 | dl &= 0xc0; 0x0042bd2c cmp dl, 0x80 | | if (dl != 0x80) { 0x0042bd2f jne 0x42bd4b | goto label_33; | } 0x0042bd31 mov dl, byte [r15 + r14 + 3] | dl = *((r15 + r14 + 3)); 0x0042bd36 and dl, 0xc0 | dl &= 0xc0; 0x0042bd39 cmp dl, 0x80 | | if (dl != 0x80) { 0x0042bd3c jne 0x42bd4b | goto label_33; | } 0x0042bd3e mov dl, byte [r15 + r14 + 4] | dl = *((r15 + r14 + 4)); 0x0042bd43 and dl, 0xc0 | dl &= 0xc0; 0x0042bd46 cmp dl, 0x80 | | if (dl == 0x80) { 0x0042bd49 je 0x42bd96 | goto label_30; | } | } | label_33: 0x0042bd4b cmp rbp, r11 | | if (rbp >= r11) { 0x0042bd4e jae 0x42bd93 | goto label_26; | } | do { 0x0042bd50 movzx edx, byte [rbp] | edx = *(rbp); 0x0042bd54 and dl, 0xc0 | dl &= 0xc0; 0x0042bd57 cmp dl, 0x80 | | if (dl != 0x80) { 0x0042bd5a jne 0x42bd93 | goto label_26; | } 0x0042bd5c inc rbp | rbp++; 0x0042bd5f cmp r11, rbp | 0x0042bd62 jne 0x42bd50 | | } while (r11 != rbp); 0x0042bd64 jmp 0x42bd84 | goto label_27; | label_29: 0x0042bd66 cmp rbp, r11 | | if (rbp >= r11) { 0x0042bd69 jae 0x42bd89 | goto label_25; | } 0x0042bd6b mov rdi, qword [rsp - 0x18] | rdi = *((rsp - 0x18)); | do { 0x0042bd70 movzx edx, byte [rbp] | edx = *(rbp); 0x0042bd74 and dl, 0xc0 | dl &= 0xc0; 0x0042bd77 cmp dl, 0x80 | | if (dl != 0x80) { 0x0042bd7a jne 0x42bd93 | goto label_26; | } 0x0042bd7c inc rbp | rbp++; 0x0042bd7f cmp r11, rbp | 0x0042bd82 jne 0x42bd70 | | } while (r11 != rbp); | label_27: 0x0042bd84 mov r8, r11 | r8 = r11; 0x0042bd87 jmp 0x42bd96 | goto label_30; | label_25: 0x0042bd89 mov r8, rbp | r8 = rbp; 0x0042bd8c mov rdi, qword [rsp - 0x18] | rdi = *((rsp - 0x18)); 0x0042bd91 jmp 0x42bd96 | goto label_30; | label_26: 0x0042bd93 mov r8, rbp | r8 = rbp; | label_30: 0x0042bd96 or eax, 1 | eax |= 1; 0x0042bd99 test r9w, r9w | | if (r9w != 0) { 0x0042bd9d je 0x42bdac | | label_19: 0x0042bd9f add rsi, 2 | rsi += 2; 0x0042bda3 mov word [r12 + r14*2], r10w | *((r12 + r14*2)) = r10w; 0x0042bda8 paddq xmm0, xmm1 | __asm ("paddq xmm0, xmm1"); | } | label_20: 0x0042bdac mov r12, rsi | r12 = rsi; | label_2: 0x0042bdaf mov r15, r8 | r15 = r8; 0x0042bdb2 cmp r8, r11 | 0x0042bdb5 mov r8, qword [rsp - 0x10] | r8 = *((rsp - 0x10)); | if (r8 < r11) { 0x0042bdba jb 0x42ba34 | goto label_1; | } 0x0042bdc0 jmp 0x42c297 | goto label_34; | label_18: 0x0042bdc5 cmp r13, 1 | | if (r13 <= 1) { 0x0042bdc9 jbe 0x42c2af | goto label_31; | } 0x0042bdcf rol dx, 8 | dx = rotate_left16 (dx, 8); 0x0042bdd3 mov word [r12 + r14*2], dx | *((r12 + r14*2)) = dx; 0x0042bdd8 mov rdx, 0xffffffffffffffff | rdx = 0xffffffffffffffff; 0x0042bddf mov ebx, 1 | ebx = 1; | label_32: 0x0042bde4 lea r12, [rsi + rbx*2] | r12 = rsi + rbx*2; 0x0042bde8 movdqa xmm3, xmm2 | __asm ("movdqa xmm3, xmm2"); 0x0042bdec pinsrq xmm3, rdx, 0 | __asm ("pinsrq xmm3, rdx, 0"); 0x0042bdf3 paddq xmm0, xmm3 | __asm ("paddq xmm0, xmm3"); | do { | label_24: 0x0042bdf7 mov rdi, qword [rsp - 0x18] | rdi = *((rsp - 0x18)); 0x0042bdfc jmp 0x42bdaf | goto label_2; | label_23: 0x0042bdfe mov r12, rsi | r12 = rsi; 0x0042be01 jmp 0x42bdf7 | | } while (1); | label_8: 0x0042be03 test rsi, rsi | | if (rsi == 0) { 0x0042be06 je 0x42c1ed | goto label_9; | } 0x0042be0c test rax, rax | | if (rax <= 0) { 0x0042be0f jle 0x42c219 | goto label_35; | } 0x0042be15 mov qword [rsp - 0x10], r8 | *((rsp - 0x10)) = r8; 0x0042be1a movq xmm0, rsi | xmm0 = rsi; 0x0042be1f xor eax, eax | eax = 0; 0x0042be21 movdqa xmm1, xmmword [rip + 0x3fa87] | __asm ("movdqa xmm1, xmmword [0x0046b8b0]"); 0x0042be29 movdqa xmm2, xmmword [rip + 0x3fa8f] | __asm ("movdqa xmm2, xmmword [0x0046b8c0]"); 0x0042be31 mov r8, rdi | r8 = rdi; | label_4: 0x0042be34 movq rdx, xmm0 | rdx = xmm0; 0x0042be39 pextrq rbp, xmm0, 1 | __asm ("pextrq rbp, xmm0, 1"); 0x0042be40 add rbp, rdx | rbp += rdx; 0x0042be43 cmp rdx, 1 | 0x0042be47 adc rbp, 0xffffffffffffffff | rbp += 0xffffffffffffffff; 0x0042be4b xor r10d, r10d | r10d = 0; 0x0042be4e mov r14, r8 | r14 = r8; 0x0042be51 nop word cs:[rax + rax] | 0x0042be5b nop dword [rax + rax] | | do { 0x0042be60 movq r12, xmm0 | r12 = xmm0; 0x0042be65 test r9w, r9w | | if (r9w != 0) { 0x0042be69 je 0x42be75 | 0x0042be6b cmp r12, 1 | | if (r12 <= 1) { 0x0042be6f jbe 0x42c255 | goto label_36; | } | } 0x0042be75 movzx edx, byte [r15 + r10] | edx = *((r15 + r10)); 0x0042be7a test dl, dl | | if (dl < 0) { 0x0042be7c js 0x42bead | goto label_37; | } 0x0042be7e pextrq rsi, xmm0, 1 | __asm ("pextrq rsi, xmm0, 1"); 0x0042be85 cmp rsi, rbp | | if (rsi == rbp) { 0x0042be88 je 0x42c261 | goto label_38; | } 0x0042be8e mov word [r8 + r10*2], dx | *((r8 + r10*2)) = dx; 0x0042be93 add r14, 2 | r14 += 2; 0x0042be97 paddq xmm0, xmm1 | __asm ("paddq xmm0, xmm1"); 0x0042be9b lea rdx, [r15 + r10 + 1] | rdx = r15 + r10 + 1; 0x0042bea0 inc r10 | r10++; 0x0042bea3 cmp rdx, r11 | 0x0042bea6 jb 0x42be60 | | } while (rdx < r11); 0x0042bea8 jmp 0x42c258 | goto label_39; | label_37: 0x0042bead mov qword [rsp - 0x18], rdi | *((rsp - 0x18)) = rdi; 0x0042beb2 mov ebx, edx | ebx = edx; 0x0042beb4 and bl, 0xe0 | bl &= 0xe0; 0x0042beb7 cmp bl, 0xc0 | | if (bl != 0xc0) { 0x0042beba jne 0x42bf2f | goto label_40; | } 0x0042bebc lea rbp, [r15 + r10 + 1] | rbp = r15 + r10 + 1; 0x0042bec1 lea rsi, [r15 + r10 + 2] | rsi = r15 + r10 + 2; 0x0042bec6 cmp rsi, r11 | | if (rsi > r11) { 0x0042bec9 ja 0x42bfbf | goto label_41; | } 0x0042becf movzx r15d, byte [rbp] | r15d = *(rbp); 0x0042bed4 mov ebx, r15d | ebx = r15d; 0x0042bed7 and bl, 0xc0 | bl &= 0xc0; 0x0042beda cmp bl, 0x80 | | if (bl != 0x80) { 0x0042bedd jne 0x42bfbf | goto label_41; | } 0x0042bee3 and r15d, 0x3f | r15d &= 0x3f; 0x0042bee7 and edx, 0x1f | edx &= 0x1f; 0x0042beea shl edx, 6 | edx <<= 6; 0x0042beed or edx, r15d | edx |= r15d; 0x0042bef0 cmp edx, 0x80 | 0x0042bef6 jb 0x42bf18 | | while (edx >= 0x800) { 0x0042bef8 cmp edx, 0xffff | | if (edx > 0xffff) { 0x0042befe ja 0x42c070 | goto label_42; | } 0x0042bf04 mov ebx, edx | ebx = edx; 0x0042bf06 and ebx, 0xf800 | ebx &= 0xf800; 0x0042bf0c cmp ebx, 0xd800 | | if (ebx != 0xd800) { 0x0042bf12 jne 0x42c1b3 | goto label_43; | } | label_3: 0x0042bf18 or eax, 1 | eax |= 1; 0x0042bf1b test r9w, r9w | 0x0042bf1f mov rdi, qword [rsp - 0x18] | rdi = *((rsp - 0x18)); | if (r9w != 0) { 0x0042bf24 jne 0x42c192 | goto label_44; | } 0x0042bf2a jmp 0x42c19f | goto label_45; | label_40: 0x0042bf2f mov ebx, edx | ebx = edx; 0x0042bf31 and bl, 0xf0 | bl &= 0xf0; 0x0042bf34 cmp bl, 0xe0 | | if (bl != 0xe0) { 0x0042bf37 jne 0x42bfea | goto label_46; | } 0x0042bf3d lea rbp, [r15 + r10 + 1] | rbp = r15 + r10 + 1; 0x0042bf42 lea rsi, [r15 + r10 + 3] | rsi = r15 + r10 + 3; 0x0042bf47 cmp rsi, r11 | | if (rsi > r11) { 0x0042bf4a ja 0x42c0c2 | goto label_47; | } 0x0042bf50 movzx r13d, byte [rbp] | r13d = *(rbp); 0x0042bf55 mov ebx, r13d | ebx = r13d; 0x0042bf58 and bl, 0xc0 | bl &= 0xc0; 0x0042bf5b cmp bl, 0x80 | | if (bl != 0x80) { 0x0042bf5e jne 0x42c0c2 | goto label_47; | } 0x0042bf64 movzx r15d, byte [r15 + r10 + 2] | r15d = *((r15 + r10 + 2)); 0x0042bf6a mov ebx, r15d | ebx = r15d; 0x0042bf6d and bl, 0xc0 | bl &= 0xc0; 0x0042bf70 cmp bl, 0x80 | | if (bl != 0x80) { 0x0042bf73 jne 0x42c0c2 | goto label_47; | } 0x0042bf79 and r15d, 0x3f | r15d &= 0x3f; 0x0042bf7d and r13d, 0x3f | r13d &= 0x3f; 0x0042bf81 shl r13d, 6 | r13d <<= 6; 0x0042bf85 and edx, 0xf | edx &= 0xf; 0x0042bf88 shl edx, 0xc | edx <<= 0xc; 0x0042bf8b or edx, r13d | edx |= r13d; 0x0042bf8e or edx, r15d | edx |= r15d; 0x0042bf91 cmp edx, 0x800 | 0x0042bf97 jae 0x42bef8 | | } 0x0042bf9d or eax, 1 | eax |= 1; 0x0042bfa0 test r9w, r9w | | if (r9w == 0) { 0x0042bfa4 je 0x42c1e8 | goto label_48; | } 0x0042bfaa add r14, 2 | r14 += 2; 0x0042bfae mov word [r8 + r10*2], r9w | *((r8 + r10*2)) = r9w; 0x0042bfb3 paddq xmm0, xmm1 | __asm ("paddq xmm0, xmm1"); 0x0042bfb7 mov r8, r14 | r8 = r14; 0x0042bfba jmp 0x42c1e1 | goto label_49; | label_41: 0x0042bfbf cmp rbp, r11 | | if (rbp >= r11) { 0x0042bfc2 jae 0x42c0e5 | goto label_50; | } 0x0042bfc8 mov rdi, qword [rsp - 0x18] | rdi = *((rsp - 0x18)); | do { 0x0042bfcd movzx edx, byte [rbp] | edx = *(rbp); 0x0042bfd1 and dl, 0xc0 | dl &= 0xc0; 0x0042bfd4 cmp dl, 0x80 | | if (dl != 0x80) { 0x0042bfd7 jne 0x42c0f2 | goto label_51; | } 0x0042bfdd inc rbp | rbp++; 0x0042bfe0 cmp r11, rbp | 0x0042bfe3 jne 0x42bfcd | | } while (r11 != rbp); 0x0042bfe5 jmp 0x42c177 | goto label_52; | label_46: 0x0042bfea mov ebx, edx | ebx = edx; 0x0042bfec and bl, 0xf8 | bl &= 0xf8; 0x0042bfef lea r13, [r15 + r10 + 1] | r13 = r15 + r10 + 1; 0x0042bff4 cmp bl, 0xf0 | | if (bl != 0xf0) { 0x0042bff7 jne 0x42c0fa | goto label_53; | } 0x0042bffd lea rsi, [r15 + r10 + 4] | rsi = r15 + r10 + 4; 0x0042c002 cmp rsi, r11 | | if (rsi > r11) { 0x0042c005 ja 0x42c158 | goto label_54; | } 0x0042c00b movzx ebp, byte [r13] | ebp = *(r13); 0x0042c010 mov ebx, ebp | ebx = ebp; 0x0042c012 and bl, 0xc0 | bl &= 0xc0; 0x0042c015 cmp bl, 0x80 | | if (bl != 0x80) { 0x0042c018 jne 0x42c158 | goto label_54; | } 0x0042c01e movzx edi, byte [r15 + r10 + 2] | edi = *((r15 + r10 + 2)); 0x0042c024 mov ebx, edi | ebx = edi; 0x0042c026 and bl, 0xc0 | bl &= 0xc0; 0x0042c029 cmp bl, 0x80 | | if (bl != 0x80) { 0x0042c02c jne 0x42c158 | goto label_54; | } 0x0042c032 movzx r15d, byte [r15 + r10 + 3] | r15d = *((r15 + r10 + 3)); 0x0042c038 mov ebx, r15d | ebx = r15d; 0x0042c03b and bl, 0xc0 | bl &= 0xc0; 0x0042c03e cmp bl, 0x80 | | if (bl != 0x80) { 0x0042c041 jne 0x42c158 | goto label_54; | } 0x0042c047 and r15d, 0x3f | r15d &= 0x3f; 0x0042c04b and edi, 0x3f | edi &= 0x3f; 0x0042c04e shl edi, 6 | edi <<= 6; 0x0042c051 and ebp, 0x3f | ebp &= 0x3f; 0x0042c054 shl ebp, 0xc | ebp <<= 0xc; 0x0042c057 and edx, 7 | edx &= 7; 0x0042c05a shl edx, 0x12 | edx <<= 0x12; 0x0042c05d or edx, ebp | edx |= ebp; 0x0042c05f or edx, edi | edx |= edi; 0x0042c061 or edx, r15d | edx |= r15d; 0x0042c064 cmp edx, 0x10000 | | if (edx < 0x10000) { 0x0042c06a jb 0x42bf18 | goto label_3; | } | label_42: 0x0042c070 mov rdi, qword [rsp - 0x18] | rdi = *((rsp - 0x18)); 0x0042c075 cmp edx, 0x110000 | | if (edx >= 0x110000) { 0x0042c07b jae 0x42c189 | goto label_55; | } 0x0042c081 cmp r12, 2 | | if (r12 <= 2) { 0x0042c085 jbe 0x42c2c8 | goto label_56; | } 0x0042c08b lea ebx, [rdx + 0xff0000] | ebx = rdx + 0xff0000; 0x0042c091 shr ebx, 0xa | ebx >>= 0xa; 0x0042c094 or ebx, 0xd800 | ebx |= 0xd800; 0x0042c09a mov word [r8 + r10*2], bx | *((r8 + r10*2)) = bx; 0x0042c09f and edx, 0x3ff | edx &= 0x3ff; 0x0042c0a5 or edx, 0xdc00 | edx |= 0xdc00; 0x0042c0ab mov word [r8 + r10*2 + 2], dx | *((r8 + r10*2 + 2)) = dx; 0x0042c0b1 mov rdx, 0xfffffffffffffffe | rdx = 0xfffffffffffffffe; 0x0042c0b8 mov ebx, 2 | ebx = 2; 0x0042c0bd jmp 0x42c1ce | goto label_57; | label_47: 0x0042c0c2 cmp rbp, r11 | | if (rbp >= r11) { 0x0042c0c5 jae 0x42c0e5 | goto label_50; | } 0x0042c0c7 mov rdi, qword [rsp - 0x18] | rdi = *((rsp - 0x18)); | do { 0x0042c0cc movzx edx, byte [rbp] | edx = *(rbp); 0x0042c0d0 and dl, 0xc0 | dl &= 0xc0; 0x0042c0d3 cmp dl, 0x80 | | if (dl != 0x80) { 0x0042c0d6 jne 0x42c0f2 | goto label_51; | } 0x0042c0d8 inc rbp | rbp++; 0x0042c0db cmp r11, rbp | 0x0042c0de jne 0x42c0cc | | } while (r11 != rbp); 0x0042c0e0 jmp 0x42c177 | goto label_52; | label_50: 0x0042c0e5 mov rsi, rbp | rsi = rbp; 0x0042c0e8 mov rdi, qword [rsp - 0x18] | rdi = *((rsp - 0x18)); 0x0042c0ed jmp 0x42c189 | goto label_55; | label_51: 0x0042c0f2 mov rsi, rbp | rsi = rbp; 0x0042c0f5 jmp 0x42c189 | goto label_55; | label_53: 0x0042c0fa lea rsi, [r15 + r10 + 5] | rsi = r15 + r10 + 5; 0x0042c0ff cmp rsi, r11 | 0x0042c102 mov rdi, qword [rsp - 0x18] | rdi = *((rsp - 0x18)); | if (rsi <= r11) { 0x0042c107 ja 0x42c13c | 0x0042c109 mov dl, byte [r13] | dl = *(r13); 0x0042c10d and dl, 0xc0 | dl &= 0xc0; 0x0042c110 cmp dl, 0x80 | | if (dl != 0x80) { 0x0042c113 jne 0x42c13c | goto label_58; | } 0x0042c115 mov dl, byte [r15 + r10 + 2] | dl = *((r15 + r10 + 2)); 0x0042c11a and dl, 0xc0 | dl &= 0xc0; 0x0042c11d cmp dl, 0x80 | | if (dl != 0x80) { 0x0042c120 jne 0x42c13c | goto label_58; | } 0x0042c122 mov dl, byte [r15 + r10 + 3] | dl = *((r15 + r10 + 3)); 0x0042c127 and dl, 0xc0 | dl &= 0xc0; 0x0042c12a cmp dl, 0x80 | | if (dl != 0x80) { 0x0042c12d jne 0x42c13c | goto label_58; | } 0x0042c12f mov dl, byte [r15 + r10 + 4] | dl = *((r15 + r10 + 4)); 0x0042c134 and dl, 0xc0 | dl &= 0xc0; 0x0042c137 cmp dl, 0x80 | | if (dl == 0x80) { 0x0042c13a je 0x42c189 | goto label_55; | } | } | label_58: 0x0042c13c cmp r13, r11 | | if (r13 >= r11) { 0x0042c13f jae 0x42c17c | goto label_59; | } | do { 0x0042c141 movzx edx, byte [r13] | edx = *(r13); 0x0042c146 and dl, 0xc0 | dl &= 0xc0; 0x0042c149 cmp dl, 0x80 | | if (dl != 0x80) { 0x0042c14c jne 0x42c17c | goto label_59; | } 0x0042c14e inc r13 | r13++; 0x0042c151 cmp r11, r13 | 0x0042c154 jne 0x42c141 | | } while (r11 != r13); 0x0042c156 jmp 0x42c177 | goto label_52; | label_54: 0x0042c158 cmp r13, r11 | | if (r13 >= r11) { 0x0042c15b jae 0x42c181 | goto label_60; | } 0x0042c15d mov rdi, qword [rsp - 0x18] | rdi = *((rsp - 0x18)); | do { 0x0042c162 movzx edx, byte [r13] | edx = *(r13); 0x0042c167 and dl, 0xc0 | dl &= 0xc0; 0x0042c16a cmp dl, 0x80 | | if (dl != 0x80) { 0x0042c16d jne 0x42c17c | goto label_59; | } 0x0042c16f inc r13 | r13++; 0x0042c172 cmp r11, r13 | 0x0042c175 jne 0x42c162 | | } while (r11 != r13); | label_52: 0x0042c177 mov rsi, r11 | rsi = r11; 0x0042c17a jmp 0x42c189 | goto label_55; | label_59: 0x0042c17c mov rsi, r13 | rsi = r13; 0x0042c17f jmp 0x42c189 | goto label_55; | label_60: 0x0042c181 mov rsi, r13 | rsi = r13; 0x0042c184 mov rdi, qword [rsp - 0x18] | rdi = *((rsp - 0x18)); | label_55: 0x0042c189 or eax, 1 | eax |= 1; 0x0042c18c test r9w, r9w | | if (r9w != 0) { 0x0042c190 je 0x42c19f | | label_44: 0x0042c192 add r14, 2 | r14 += 2; 0x0042c196 mov word [r8 + r10*2], r9w | *((r8 + r10*2)) = r9w; 0x0042c19b paddq xmm0, xmm1 | __asm ("paddq xmm0, xmm1"); | } | label_45: 0x0042c19f mov r8, r14 | r8 = r14; | label_5: 0x0042c1a2 mov r15, rsi | r15 = rsi; 0x0042c1a5 cmp rsi, r11 | | if (rsi < r11) { 0x0042c1a8 jb 0x42be34 | goto label_4; | } 0x0042c1ae jmp 0x42c2a3 | goto label_61; | label_43: 0x0042c1b3 cmp r12, 1 | | if (r12 <= 1) { 0x0042c1b7 jbe 0x42c2c8 | goto label_56; | } 0x0042c1bd mov word [r8 + r10*2], dx | *((r8 + r10*2)) = dx; 0x0042c1c2 mov rdx, 0xffffffffffffffff | rdx = 0xffffffffffffffff; 0x0042c1c9 mov ebx, 1 | ebx = 1; | label_57: 0x0042c1ce lea r8, [r14 + rbx*2] | r8 = r14 + rbx*2; 0x0042c1d2 movdqa xmm3, xmm2 | __asm ("movdqa xmm3, xmm2"); 0x0042c1d6 pinsrq xmm3, rdx, 0 | __asm ("pinsrq xmm3, rdx, 0"); 0x0042c1dd paddq xmm0, xmm3 | __asm ("paddq xmm0, xmm3"); | do { | label_49: 0x0042c1e1 mov rdi, qword [rsp - 0x18] | rdi = *((rsp - 0x18)); 0x0042c1e6 jmp 0x42c1a2 | goto label_5; | label_48: 0x0042c1e8 mov r8, r14 | r8 = r14; 0x0042c1eb jmp 0x42c1e1 | | } while (1); | label_9: 0x0042c1ed test rcx, rcx | | if (rcx != 0) { 0x0042c1f0 je 0x42c1f9 | 0x0042c1f2 mov qword [rcx], 0 | *(rcx) = 0; | } 0x0042c1f9 mov eax, 2 | eax = 2; 0x0042c1fe test r8, r8 | | if (r8 == 0) { 0x0042c201 je 0x42c28c | goto label_62; | } 0x0042c207 mov qword [r8], 0 | *(r8) = 0; 0x0042c20e jmp 0x42c28c | goto label_62; | label_10: 0x0042c210 xor eax, eax | eax = 0; 0x0042c212 mov rsi, rdi | rsi = rdi; 0x0042c215 xor ebp, ebp | ebp = 0; 0x0042c217 jmp 0x42c231 | goto label_7; | label_35: 0x0042c219 xor eax, eax | eax = 0; 0x0042c21b mov r14, rdi | r14 = rdi; 0x0042c21e xor ebp, ebp | ebp = 0; 0x0042c220 jmp 0x42c269 | goto label_63; | label_11: 0x0042c222 or eax, 2 | eax |= 2; | label_14: 0x0042c225 pextrq rbp, xmm0, 1 | __asm ("pextrq rbp, xmm0, 1"); 0x0042c22c jmp 0x42c231 | goto label_7; | label_13: 0x0042c22e or eax, 2 | eax |= 2; | do { | label_7: 0x0042c231 mov word [rsi], 0 | *(rsi) = 0; 0x0042c236 test rcx, rcx | | if (rcx != 0) { 0x0042c239 je 0x42c241 | 0x0042c23b inc rbp | rbp++; 0x0042c23e mov qword [rcx], rbp | *(rcx) = rbp; | } 0x0042c241 test r8, r8 | | if (r8 != 0) { 0x0042c244 je 0x42c28c | 0x0042c246 add rsi, 2 | rsi += 2; 0x0042c24a sub rsi, rdi | rsi -= rdi; 0x0042c24d sar rsi, 1 | rsi >>= 1; 0x0042c250 mov qword [r8], rsi | *(r8) = rsi; 0x0042c253 jmp 0x42c28c | goto label_62; | label_36: 0x0042c255 or eax, 2 | eax |= 2; | label_39: 0x0042c258 pextrq rbp, xmm0, 1 | __asm ("pextrq rbp, xmm0, 1"); 0x0042c25f jmp 0x42c264 | goto label_6; | label_38: 0x0042c261 or eax, 2 | eax |= 2; | label_6: 0x0042c264 mov r8, qword [rsp - 0x10] | r8 = *((rsp - 0x10)); | label_63: 0x0042c269 mov word [r14], 0 | *(r14) = 0; 0x0042c26f test rcx, rcx | | if (rcx != 0) { 0x0042c272 je 0x42c27a | 0x0042c274 inc rbp | rbp++; 0x0042c277 mov qword [rcx], rbp | *(rcx) = rbp; | } 0x0042c27a test r8, r8 | | if (r8 == 0) { 0x0042c27d je 0x42c28c | goto label_62; | } 0x0042c27f add r14, 2 | r14 += 2; 0x0042c283 sub r14, rdi | r14 -= rdi; 0x0042c286 sar r14, 1 | r14 >>= 1; 0x0042c289 mov qword [r8], r14 | *(r8) = r14; | } | label_62: 0x0042c28c pop rbx | 0x0042c28d pop r12 | r12 = rbx; 0x0042c28f pop r13 | r13 = rbx; 0x0042c291 pop r14 | r14 = rbx; 0x0042c293 pop r15 | r15 = rbx; 0x0042c295 pop rbp | 0x0042c296 ret | return rax; | label_34: 0x0042c297 pextrq rbp, xmm0, 1 | __asm ("pextrq rbp, xmm0, 1"); 0x0042c29e mov rsi, r12 | rsi = r12; 0x0042c2a1 jmp 0x42c231 | | } while (1); | label_61: 0x0042c2a3 pextrq rbp, xmm0, 1 | __asm ("pextrq rbp, xmm0, 1"); 0x0042c2aa mov r14, r8 | r14 = r8; 0x0042c2ad jmp 0x42c264 | goto label_6; | label_31: 0x0042c2af or eax, 2 | eax |= 2; 0x0042c2b2 pextrq rbp, xmm0, 1 | __asm ("pextrq rbp, xmm0, 1"); 0x0042c2b9 mov rdi, qword [rsp - 0x18] | rdi = *((rsp - 0x18)); 0x0042c2be mov r8, qword [rsp - 0x10] | r8 = *((rsp - 0x10)); 0x0042c2c3 jmp 0x42c231 | goto label_7; | label_56: 0x0042c2c8 or eax, 2 | eax |= 2; 0x0042c2cb pextrq rbp, xmm0, 1 | __asm ("pextrq rbp, xmm0, 1"); 0x0042c2d2 mov rdi, qword [rsp - 0x18] | rdi = *((rsp - 0x18)); 0x0042c2d7 jmp 0x42c264 | goto label_6; | }