; assembly | /* r2dec pseudo code output */ | /* baljsn_datumutil.t/assume @ 0x443490 */ | #include | ; (fcn) method.BloombergLP::bdlb::BitStringUtil.minusEqual_unsigned_long__unsigned_long__unsigned_long_const__unsigned_long__unsigned_long_ () | int64_t method_BloombergLP::bdlb::BitStringUtil_minusEqual_unsigned_long_unsigned_long_unsigned_long_const_unsigned_long_unsigned_long_ (uint32_t arg5, uint32_t arg4, int64_t arg3, uint32_t arg2, int64_t arg1) { | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlb::BitStringUtil::minusEqual(unsigned long*, unsigned long, unsigned long const*, unsigned long, unsigned long) */ 0x00443490 push rbp | 0x00443491 push r15 | 0x00443493 push r14 | 0x00443495 push r13 | 0x00443497 push r12 | 0x00443499 push rbx | 0x0044349a mov r11, rcx | r11 = rcx; 0x0044349d mov r15, rsi | r15 = rsi; 0x004434a0 shr r15, 6 | r15 >>= 6; 0x004434a4 lea r12, [rdi + r15*8] | r12 = rdi + r15*8; 0x004434a8 mov r9d, esi | r9d = esi; 0x004434ab and r9d, 0x3f | r9d &= 0x3f; 0x004434af mov rbp, r12 | 0x004434b2 shr rbp, 3 | rbp >>= 3; 0x004434b6 mov r14, rcx | r14 = rcx; 0x004434b9 shr r14, 6 | r14 >>= 6; 0x004434bd lea r13, [rdx + r14*8] | r13 = rdx + r14*8; 0x004434c1 and ecx, 0x3f | ecx &= 0x3f; 0x004434c4 mov rbx, r13 | rbx = r13; 0x004434c7 shr rbx, 3 | rbx >>= 3; 0x004434cb sub rbp, rbx | rbp -= rbx; 0x004434ce mov ebx, r9d | ebx = r9d; 0x004434d1 sub ebx, ecx | ebx -= ecx; 0x004434d3 xor eax, eax | eax = 0; 0x004434d5 cmp ebx, 0x3f | 0x004434d8 seta al | al = (ebx > 0x3f) ? 1 : 0; 0x004434db sub rbp, rax | rbp -= rax; 0x004434de test rbp, rbp | | if (rbp <= 0) { 0x004434e1 jg 0x4434fd | 0x004434e3 lea eax, [rbx + 0x40] | eax = rbx + 0x40; 0x004434e6 cmp ebx, 0x40 | | if (ebx < 0x40) { 0x004434e9 cmovb eax, ebx | eax = ebx; | } 0x004434ec test eax, eax | | if (eax == 0) { 0x004434ee je 0x44365b | goto label_8; | } 0x004434f4 test rbp, rbp | | if (rbp != 0) { 0x004434f7 jne 0x44365b | goto label_8; | } | } 0x004434fd test r8, r8 | | if (r8 == 0) { 0x00443500 je 0x443df9 | goto label_9; | } 0x00443506 add rsi, r8 | rsi += r8; 0x00443509 mov r15, rsi | r15 = rsi; 0x0044350c shr r15, 6 | r15 >>= 6; 0x00443510 lea r10, [rdi + r15*8] | r10 = rdi + r15*8; 0x00443514 and esi, 0x3f | esi &= 0x3f; 0x00443517 add r11, r8 | r11 += r8; 0x0044351a mov r12, r11 | r12 = r11; 0x0044351d shr r12, 6 | r12 >>= 6; 0x00443521 lea rbp, [rdx + r12*8] | rbp = rdx + r12*8; 0x00443525 and r11d, 0x3f | r11d &= 0x3f; | if (r11d != 0) { 0x00443529 je 0x4435be | 0x0044352f mov r13d, r11d | r13d = r11d; 0x00443532 cmp r13, r8 | | if (r13 >= r8) { 0x00443535 jae 0x4436e9 | goto label_10; | } 0x0044353b mov qword [rsp - 0x28], rdi | *((rsp - 0x28)) = rdi; 0x00443540 mov qword [rsp - 0x20], rdx | *((rsp - 0x20)) = rdx; 0x00443545 lea r9d, [rsi + 0x40] | r9d = rsi + 0x40; 0x00443549 cmp esi, r11d | | if (esi >= r11d) { 0x0044354c cmovae r9d, esi | r9d = esi; | } 0x00443550 sbb r14, r14 | r14 -= r14; 0x00443553 mov esi, r9d | esi = r9d; 0x00443556 sub esi, r11d | esi -= r11d; 0x00443559 mov qword [rsp - 0x18], r10 | *((rsp - 0x18)) = r10; 0x0044355e lea rdi, [r10 + r14*8] | rdi = r10 + r14*8; 0x00443562 mov rdx, qword [rbp] | rdx = *(rbp); 0x00443566 mov r10d, 0x40 | r10d = 0x40; 0x0044356c sub r10d, esi | r10d -= esi; 0x0044356f sub r11d, r10d | r11d -= r10d; | if (r11d <= 0) { 0x00443572 jbe 0x443762 | goto label_11; | } 0x00443578 mov rax, 0xffffffffffffffff | rax = 0xffffffffffffffff; 0x0044357f mov ecx, esi | ecx = esi; 0x00443581 shl rax, cl | rax <<= cl; 0x00443584 not rax | rax = ~rax; 0x00443587 mov rbx, rbp | rbx = rbp; 0x0044358a mov rbp, rdx | 0x0044358d not rbp | rbp = ~rbp; 0x00443590 shl rbp, cl | rbp <<= cl; 0x00443593 or rbp, rax | rbp |= rax; 0x00443596 and qword [rdi], rbp | *(rdi) &= rbp; 0x00443599 mov rbp, rbx | 0x0044359c mov ecx, r10d | ecx = r10d; 0x0044359f shr rdx, cl | rdx >>= cl; 0x004435a2 mov rax, 0xffffffffffffffff | rax = 0xffffffffffffffff; 0x004435a9 mov ecx, r11d | ecx = r11d; 0x004435ac shl rax, cl | rax <<= cl; 0x004435af add rdi, 8 | rdi += 8; 0x004435b3 not rdx | rdx = ~rdx; 0x004435b6 or rdx, rax | rdx |= rax; 0x004435b9 jmp 0x44379a | goto label_12; | } 0x004435be xor r14d, r14d | r14d = 0; 0x004435c1 test esi, esi | | if (esi == 0) { 0x004435c3 je 0x4437b7 | goto label_13; | } | label_0: 0x004435c9 cmp r8, 0x40 | | if (r8 < 0x40) { 0x004435cd jb 0x44382d | goto label_14; | } 0x004435d3 mov qword [rsp - 0x20], rbp | *((rsp - 0x20)) = rbp; 0x004435d8 mov qword [rsp - 0x18], r10 | *((rsp - 0x18)) = r10; 0x004435dd mov r10d, 0x40 | r10d = 0x40; 0x004435e3 sub r10d, esi | r10d -= esi; 0x004435e6 mov r9d, esi | r9d = esi; 0x004435e9 mov r11, 0xffffffffffffffff | r11 = 0xffffffffffffffff; 0x004435f0 mov ecx, esi | ecx = esi; 0x004435f2 shl r11, cl | r11 <<= cl; 0x004435f5 mov r13, r11 | r13 = r11; 0x004435f8 not r13 | r13 = ~r13; 0x004435fb add r15, r14 | r15 += r14; 0x004435fe lea rdi, [rdi + r15*8] | rdi = rdi + r15*8; 0x00443602 lea rdx, [rdx + r12*8 - 8] | rdx = rdx + r12*8 - 8; 0x00443607 xor ecx, ecx | ecx = 0; 0x00443609 nop dword [rax] | | do { 0x00443610 mov rax, rcx | rax = rcx; 0x00443613 mov rbp, qword [rdx + rcx*8] | rbp = *((rdx + rcx*8)); 0x00443617 mov rbx, rbp | rbx = *((rdx + rcx*8)); 0x0044361a not rbx | rbx = ~rbx; 0x0044361d mov ecx, r9d | ecx = r9d; 0x00443620 shl rbx, cl | rbx <<= cl; 0x00443623 or rbx, r13 | rbx |= r13; 0x00443626 and qword [rdi + rax*8 - 8], rbx | *((rdi + rax*8 - 8)) &= rbx; 0x0044362b mov ecx, r10d | ecx = r10d; 0x0044362e shr rbp, cl | rbp >>= cl; 0x00443631 not rbp | rbp = ~rbp; 0x00443634 or rbp, r11 | rbp |= r11; 0x00443637 and qword [rdi + rax*8], rbp | *((rdi + rax*8)) &= rbp; 0x0044363b lea rcx, [rax - 1] | rcx = rax - 1; 0x0044363f add r8, 0xffffffffffffffc0 | r8 += 0xffffffffffffffc0; 0x00443643 cmp r8, 0x3f | 0x00443647 ja 0x443610 | | } while (r8 > 0x3f); 0x00443649 add r14, rcx | r14 += rcx; 0x0044364c mov r10, qword [rsp - 0x18] | r10 = *((rsp - 0x18)); 0x00443651 mov rbp, qword [rsp - 0x20] | rbp = *((rsp - 0x20)); 0x00443656 jmp 0x44382f | goto label_2; | label_8: 0x0044365b test r8, r8 | | if (r8 == 0) { 0x0044365e je 0x443df9 | goto label_9; | } 0x00443664 test ecx, ecx | | if (ecx == 0) { 0x00443666 je 0x443921 | goto label_15; | } 0x0044366c mov r10d, 0x40 | r10d = 0x40; 0x00443672 mov eax, 0x40 | eax = 0x40; 0x00443677 sub eax, ecx | eax -= ecx; 0x00443679 mov rsi, qword [r13] | rsi = *(r13); 0x0044367d shr rsi, cl | rsi >>= cl; 0x00443680 cmp rax, r8 | | if (rax >= r8) { 0x00443683 jae 0x443941 | goto label_16; | } 0x00443689 mov r11, rdx | r11 = rdx; 0x0044368c cmp r9d, ecx | | if (r9d <= ecx) { 0x0044368f jbe 0x4439a0 | goto label_17; | } 0x00443695 sub r10d, r9d | r10d -= r9d; 0x00443698 mov rdx, 0xffffffffffffffff | rdx = 0xffffffffffffffff; 0x0044369f mov ecx, r9d | ecx = r9d; 0x004436a2 shl rdx, cl | rdx <<= cl; 0x004436a5 not rdx | rdx = ~rdx; 0x004436a8 mov rbp, rdi | 0x004436ab mov rdi, rsi | rdi = rsi; 0x004436ae not rdi | rdi = ~rdi; 0x004436b1 shl rdi, cl | rdi <<= cl; 0x004436b4 or rdi, rdx | rdi |= rdx; 0x004436b7 and qword [r12], rdi | *(r12) &= rdi; 0x004436bb mov rdi, rbp | rdi = rbp; 0x004436be mov rdx, 0xffffffffffffffff | rdx = 0xffffffffffffffff; 0x004436c5 mov ecx, r10d | ecx = r10d; 0x004436c8 shr rsi, cl | rsi >>= cl; 0x004436cb mov ecx, eax | ecx = eax; 0x004436cd sub ecx, r10d | ecx -= r10d; 0x004436d0 shl rdx, cl | rdx <<= cl; 0x004436d3 not rsi | rsi = ~rsi; 0x004436d6 or rsi, rdx | rsi |= rdx; 0x004436d9 and qword [r12 + 8], rsi | *((r12 + 8)) &= rsi; 0x004436de add r9d, eax | r9d += eax; 0x004436e1 mov ebx, r9d | ebx = r9d; 0x004436e4 jmp 0x4439e4 | goto label_18; | label_10: 0x004436e9 lea edx, [rsi + 0x40] | edx = rsi + 0x40; 0x004436ec cmp esi, r8d | | if (esi >= r8d) { 0x004436ef cmovae edx, esi | edx = esi; | } 0x004436f2 sbb r9, r9 | r9 -= r9; 0x004436f5 sub r11d, r8d | r11d -= r8d; 0x004436f8 mov rsi, qword [rbp] | rsi = *(rbp); 0x004436fc mov ecx, r11d | ecx = r11d; 0x004436ff shr rsi, cl | rsi >>= cl; 0x00443702 test r8d, r8d | | if (r8d == 0) { 0x00443705 je 0x443df9 | goto label_9; | } 0x0044370b mov ecx, edx | ecx = edx; 0x0044370d sub ecx, r8d | ecx -= r8d; 0x00443710 mov eax, 0x40 | eax = 0x40; 0x00443715 sub eax, ecx | eax -= ecx; 0x00443717 cmp eax, r8d | | if (eax >= r8d) { 0x0044371a jae 0x4438e6 | goto label_19; | } 0x00443720 mov rdx, 0xffffffffffffffff | rdx = 0xffffffffffffffff; 0x00443727 mov rbp, 0xffffffffffffffff | 0x0044372e shl rbp, cl | rbp <<= cl; 0x00443731 not rbp | rbp = ~rbp; 0x00443734 mov rdi, rsi | rdi = rsi; 0x00443737 not rdi | rdi = ~rdi; 0x0044373a shl rdi, cl | rdi <<= cl; 0x0044373d or rdi, rbp | rdi |= rbp; 0x00443740 and qword [r10 + r9*8], rdi | *((r10 + r9*8)) &= rdi; 0x00443744 mov ecx, eax | ecx = eax; 0x00443746 shr rsi, cl | rsi >>= cl; 0x00443749 sub r8d, eax | r8d -= eax; 0x0044374c mov ecx, r8d | ecx = r8d; 0x0044374f shl rdx, cl | rdx <<= cl; 0x00443752 not rsi | rsi = ~rsi; 0x00443755 or rsi, rdx | rsi |= rdx; 0x00443758 and qword [r10 + r9*8 + 8], rsi | *((r10 + r9*8 + 8)) &= rsi; 0x0044375d jmp 0x443df9 | goto label_9; | label_11: 0x00443762 mov r10d, esi | r10d = esi; 0x00443765 mov rbx, 0xffffffffffffffff | rbx = 0xffffffffffffffff; 0x0044376c mov rax, 0xffffffffffffffff | rax = 0xffffffffffffffff; 0x00443773 mov ecx, esi | ecx = esi; 0x00443775 shl rax, cl | rax <<= cl; 0x00443778 not rax | rax = ~rax; 0x0044377b mov ecx, r9d | ecx = r9d; 0x0044377e shl rbx, cl | rbx <<= cl; 0x00443781 cmp r9d, 0x40 | | if (r9d >= 0x40) { 0x00443785 jae 0x443e0b | goto label_20; | } | label_4: 0x0044378b or rbx, rax | rbx |= rax; 0x0044378e not rdx | rdx = ~rdx; 0x00443791 mov ecx, r10d | ecx = r10d; 0x00443794 shl rdx, cl | rdx <<= cl; 0x00443797 or rdx, rbx | rdx |= rbx; | label_12: 0x0044379a and qword [rdi], rdx | *(rdi) &= rdx; 0x0044379d sub r8, r13 | r8 -= r13; 0x004437a0 mov rdx, qword [rsp - 0x20] | rdx = *((rsp - 0x20)); 0x004437a5 mov rdi, qword [rsp - 0x28] | rdi = *((rsp - 0x28)); 0x004437aa mov r10, qword [rsp - 0x18] | r10 = *((rsp - 0x18)); 0x004437af test esi, esi | | if (esi != 0) { 0x004437b1 jne 0x4435c9 | goto label_0; | } | label_13: 0x004437b7 cmp r8, 0x40 | | if (r8 < 0x40) { 0x004437bb jb 0x44382d | goto label_14; | } 0x004437bd mov r11, r10 | r11 = r10; 0x004437c0 lea r10, [r8 - 0x40] | r10 = r8 - 0x40; 0x004437c4 cmp r10, 0xc0 | | if (r10 >= 0xc0) { 0x004437cb jb 0x443800 | 0x004437cd shr r10, 6 | r10 >>= 6; 0x004437d1 lea rbx, [r14 + r15] | rbx = r14 + r15; 0x004437d5 mov rax, r10 | rax = r10; 0x004437d8 not rax | rax = ~rax; 0x004437db lea rcx, [rbx + rax] | rcx = rbx + rax; 0x004437df lea rcx, [rdi + rcx*8] | rcx = rdi + rcx*8; 0x004437e3 cmp rcx, rbp | | if (rcx >= rbp) { 0x004437e6 jae 0x443bf1 | goto label_21; | } 0x004437ec lea rcx, [rdi + rbx*8] | rcx = rdi + rbx*8; 0x004437f0 add rax, r12 | rax += r12; 0x004437f3 lea rax, [rdx + rax*8] | rax = rdx + rax*8; 0x004437f7 cmp rax, rcx | | if (rax >= rcx) { 0x004437fa jae 0x443bf1 | goto label_21; | } | } 0x00443800 xor ecx, ecx | ecx = 0; 0x00443802 mov r10, r11 | r10 = r11; | label_1: 0x00443805 lea rax, [rdi + r15*8 - 8] | rax = rdi + r15*8 - 8; 0x0044380a lea rdx, [rdx + r12*8 - 8] | rdx = rdx + r12*8 - 8; 0x0044380f nop | | do { 0x00443810 mov rdi, qword [rdx + rcx*8] | rdi = *((rdx + rcx*8)); 0x00443814 not rdi | rdi = ~rdi; 0x00443817 and qword [rax + r14*8], rdi | *((rax + r14*8)) &= rdi; 0x0044381b dec rcx | rcx--; 0x0044381e dec r14 | r14--; 0x00443821 add r8, 0xffffffffffffffc0 | r8 += 0xffffffffffffffc0; 0x00443825 cmp r8, 0x3f | 0x00443829 ja 0x443810 | | } while (r8 > 0x3f); 0x0044382b jmp 0x44382f | goto label_2; | label_14: 0x0044382d xor ecx, ecx | ecx = 0; | label_2: 0x0044382f test r8d, r8d | | if (r8d == 0) { 0x00443832 je 0x443df9 | goto label_9; | } 0x00443838 mov eax, esi | eax = esi; 0x0044383a or eax, 0x40 | eax |= 0x40; 0x0044383d cmp esi, r8d | | if (esi >= r8d) { 0x00443840 cmovae eax, esi | eax = esi; | } 0x00443843 sbb r14, 0 | 0x00443847 mov edx, eax | edx = eax; 0x00443849 mov rbx, qword [rbp + rcx*8 - 8] | rbx = *((rbp + rcx*8 - 8)); 0x0044384e mov ecx, r8d | ecx = r8d; 0x00443851 neg cl | cl = -cl; 0x00443853 shr rbx, cl | rbx >>= cl; 0x00443856 sub edx, r8d | edx -= r8d; 0x00443859 mov esi, 0x40 | esi = 0x40; 0x0044385e sub esi, edx | esi -= edx; 0x00443860 cmp esi, r8d | | if (esi < r8d) { 0x00443863 jae 0x4438a9 | 0x00443865 mov rax, 0xffffffffffffffff | rax = 0xffffffffffffffff; 0x0044386c mov rbp, 0xffffffffffffffff | 0x00443873 mov ecx, edx | ecx = edx; 0x00443875 shl rbp, cl | rbp <<= cl; 0x00443878 not rbp | rbp = ~rbp; 0x0044387b mov rdi, rbx | rdi = rbx; 0x0044387e not rdi | rdi = ~rdi; 0x00443881 shl rdi, cl | rdi <<= cl; 0x00443884 or rdi, rbp | rdi |= rbp; 0x00443887 and qword [r10 + r14*8], rdi | *((r10 + r14*8)) &= rdi; 0x0044388b mov ecx, esi | ecx = esi; 0x0044388d shr rbx, cl | rbx >>= cl; 0x00443890 sub r8d, esi | r8d -= esi; 0x00443893 mov ecx, r8d | ecx = r8d; 0x00443896 shl rax, cl | rax <<= cl; 0x00443899 not rbx | rbx = ~rbx; 0x0044389c or rbx, rax | rbx |= rax; 0x0044389f and qword [r10 + r14*8 + 8], rbx | *((r10 + r14*8 + 8)) &= rbx; 0x004438a4 jmp 0x443df9 | goto label_9; | } 0x004438a9 mov esi, edx | esi = edx; 0x004438ab mov rbp, 0xffffffffffffffff | 0x004438b2 mov rdi, 0xffffffffffffffff | rdi = 0xffffffffffffffff; 0x004438b9 mov ecx, edx | ecx = edx; 0x004438bb shl rdi, cl | rdi <<= cl; 0x004438be not rdi | rdi = ~rdi; 0x004438c1 mov ecx, eax | ecx = eax; 0x004438c3 shl rbp, cl | rbp <<= cl; 0x004438c6 cmp eax, 0x40 | | if (eax >= 0x40) { 0x004438c9 jae 0x443e04 | goto label_22; | } | label_3: 0x004438cf or rbp, rdi | rbp |= rdi; 0x004438d2 not rbx | rbx = ~rbx; 0x004438d5 mov ecx, esi | ecx = esi; 0x004438d7 shl rbx, cl | rbx <<= cl; 0x004438da or rbx, rbp | rbx |= rbp; 0x004438dd and qword [r10 + r14*8], rbx | *((r10 + r14*8)) &= rbx; 0x004438e1 jmp 0x443df9 | goto label_9; | label_19: 0x004438e6 mov eax, ecx | eax = ecx; 0x004438e8 mov rbp, 0xffffffffffffffff | 0x004438ef mov rbx, 0xffffffffffffffff | rbx = 0xffffffffffffffff; 0x004438f6 shl rbx, cl | rbx <<= cl; 0x004438f9 not rbx | rbx = ~rbx; 0x004438fc mov ecx, edx | ecx = edx; 0x004438fe shl rbp, cl | rbp <<= cl; 0x00443901 cmp edx, 0x40 | | if (edx >= 0x40) { 0x00443904 jae 0x443e12 | goto label_23; | } | label_5: 0x0044390a or rbp, rbx | rbp |= rbx; 0x0044390d not rsi | rsi = ~rsi; 0x00443910 mov ecx, eax | ecx = eax; 0x00443912 shl rsi, cl | rsi <<= cl; 0x00443915 or rsi, rbp | rsi |= rbp; 0x00443918 and qword [r10 + r9*8], rsi | *((r10 + r9*8)) &= rsi; 0x0044391c jmp 0x443df9 | goto label_9; | label_15: 0x00443921 xor esi, esi | esi = 0; 0x00443923 test r9d, r9d | | if (r9d == 0) { 0x00443926 je 0x443a07 | goto label_24; | } | do { 0x0044392c mov ebx, r9d | ebx = r9d; 0x0044392f mov rax, rsi | rax = rsi; 0x00443932 cmp r8, 0x40 | | if (r8 >= 0x40) { 0x00443936 jae 0x443b35 | goto label_25; | } 0x0044393c jmp 0x443d65 | goto label_26; | label_16: 0x00443941 test r8d, r8d | | if (r8d == 0) { 0x00443944 je 0x443df9 | goto label_9; | } 0x0044394a mov eax, 0x40 | eax = 0x40; 0x0044394f sub eax, r9d | eax -= r9d; 0x00443952 cmp eax, r8d | | if (eax >= r8d) { 0x00443955 jae 0x443c67 | goto label_27; | } 0x0044395b mov rdx, 0xffffffffffffffff | rdx = 0xffffffffffffffff; 0x00443962 mov rdi, 0xffffffffffffffff | rdi = 0xffffffffffffffff; 0x00443969 mov ecx, r9d | ecx = r9d; 0x0044396c shl rdi, cl | rdi <<= cl; 0x0044396f not rdi | rdi = ~rdi; 0x00443972 mov rbp, rsi | 0x00443975 not rbp | rbp = ~rbp; 0x00443978 shl rbp, cl | rbp <<= cl; 0x0044397b or rbp, rdi | rbp |= rdi; 0x0044397e and qword [r12], rbp | *(r12) &= rbp; 0x00443982 mov ecx, eax | ecx = eax; 0x00443984 shr rsi, cl | rsi >>= cl; 0x00443987 sub r8d, eax | r8d -= eax; 0x0044398a mov ecx, r8d | ecx = r8d; 0x0044398d shl rdx, cl | rdx <<= cl; 0x00443990 not rsi | rsi = ~rsi; 0x00443993 or rsi, rdx | rsi |= rdx; 0x00443996 and qword [r12 + 8], rsi | *((r12 + 8)) &= rsi; 0x0044399b jmp 0x443df9 | goto label_9; | label_17: 0x004439a0 mov rdx, r12 | rdx = r12; 0x004439a3 lea ebx, [rax + r9] | ebx = rax + r9; 0x004439a7 mov r12d, r9d | r12d = r9d; 0x004439aa mov r10, 0xffffffffffffffff | r10 = 0xffffffffffffffff; 0x004439b1 mov rbp, 0xffffffffffffffff | 0x004439b8 mov ecx, r9d | ecx = r9d; 0x004439bb shl rbp, cl | rbp <<= cl; 0x004439be not rbp | rbp = ~rbp; 0x004439c1 mov ecx, ebx | ecx = ebx; 0x004439c3 shl r10, cl | r10 <<= cl; 0x004439c6 cmp ebx, 0x40 | | if (ebx >= 0x40) { 0x004439c9 jae 0x443e1d | goto label_28; | } | label_6: 0x004439cf or r10, rbp | r10 |= rbp; 0x004439d2 not rsi | rsi = ~rsi; 0x004439d5 mov ecx, r12d | ecx = r12d; 0x004439d8 shl rsi, cl | rsi <<= cl; 0x004439db or rsi, r10 | rsi |= r10; 0x004439de mov r12, rdx | r12 = rdx; 0x004439e1 and qword [rdx], rsi | *(rdx) &= rsi; | label_18: 0x004439e4 sub r8, rax | r8 -= rax; 0x004439e7 mov esi, 1 | esi = 1; 0x004439ec cmp ebx, 0x40 | 0x004439ef mov rdx, r11 | rdx = r11; | if (ebx < 0x40) { 0x004439f2 jb 0x443b29 | goto label_29; | } 0x004439f8 add ebx, 0xffffffc0 | ebx += 0xffffffc0; 0x004439fb mov r9d, ebx | r9d = ebx; 0x004439fe test r9d, r9d | 0x00443a01 jne 0x44392c | | } while (r9d != 0); | label_24: 0x00443a07 xor ebx, ebx | ebx = 0; 0x00443a09 cmp r8, 0x40 | | if (r8 < 0x40) { 0x00443a0d jb 0x443c5f | goto label_30; | } 0x00443a13 mov qword [rsp - 0x20], rdx | *((rsp - 0x20)) = rdx; 0x00443a18 lea rdx, [r8 - 0x40] | rdx = r8 - 0x40; 0x00443a1c mov r10, rdx | r10 = rdx; 0x00443a1f shr r10, 6 | r10 >>= 6; 0x00443a23 lea r11, [r10 + rsi] | r11 = r10 + rsi; 0x00443a27 mov qword [rsp - 0x28], rsi | *((rsp - 0x28)) = rsi; 0x00443a2c mov rax, rsi | rax = rsi; 0x00443a2f cmp rdx, 0xc0 | | if (rdx < 0xc0) { 0x00443a36 jb 0x443cf7 | goto label_31; | } 0x00443a3c mov rax, qword [rsp - 0x28] | rax = *((rsp - 0x28)); 0x00443a41 lea rsi, [rax + r15] | rsi = rax + r15; 0x00443a45 lea rdx, [rdi + rsi*8] | rdx = rdi + rsi*8; 0x00443a49 lea rbp, [rax + r14] | rbp = rax + r14; 0x00443a4d mov rax, rdi | rax = rdi; 0x00443a50 lea rdi, [rbp + r10] | rdi = rbp + r10; 0x00443a55 mov rcx, qword [rsp - 0x20] | rcx = *((rsp - 0x20)); 0x00443a5a lea rdi, [rcx + rdi*8 + 8] | rdi = rcx + rdi*8 + 8; 0x00443a5f cmp rdx, rdi | 0x00443a62 mov rdi, rax | rdi = rax; | if (rdx < rdi) { 0x00443a65 jae 0x443a86 | 0x00443a67 add rsi, r10 | rsi += r10; 0x00443a6a lea rdx, [rdi + rsi*8 + 8] | rdx = rdi + rsi*8 + 8; 0x00443a6f mov rax, qword [rsp - 0x20] | rax = *((rsp - 0x20)); 0x00443a74 lea rsi, [rax + rbp*8] | rsi = rax + rbp*8; 0x00443a78 mov rax, qword [rsp - 0x28] | rax = *((rsp - 0x28)); 0x00443a7d cmp rsi, rdx | | if (rsi < rdx) { 0x00443a80 jb 0x443cf7 | goto label_31; | } | } 0x00443a86 mov qword [rsp - 0x18], r13 | *((rsp - 0x18)) = r13; 0x00443a8b lea rcx, [r10 + 1] | rcx = r10 + 1; 0x00443a8f mov r13, rcx | r13 = rcx; 0x00443a92 and r13, 0xfffffffffffffffc | r13 &= 0xfffffffffffffffc; 0x00443a96 lea rdx, [r13 - 4] | rdx = r13 - 4; 0x00443a9a mov r9, rdx | r9 = rdx; 0x00443a9d shr r9, 2 | r9 >>= 2; 0x00443aa1 inc r9 | r9++; 0x00443aa4 test rdx, rdx | | if (rdx == 0) { 0x00443aa7 je 0x443cab | goto label_32; | } 0x00443aad mov rsi, r9 | rsi = r9; 0x00443ab0 and rsi, 0xfffffffffffffffe | rsi &= 0xfffffffffffffffe; 0x00443ab4 neg rsi | rsi = -rsi; 0x00443ab7 xor ebp, ebp | ebp = 0; 0x00443ab9 mov rbx, qword [rsp - 0x18] | rbx = *((rsp - 0x18)); 0x00443abe mov rax, qword [rsp - 0x28] | rax = *((rsp - 0x28)); | do { 0x00443ac3 mov rdx, rax | rdx = *((rsp - 0x28)); 0x00443ac6 or rdx, rbp | rdx |= rbp; 0x00443ac9 movups xmm0, xmmword [rbx + rdx*8] | __asm ("movups xmm0, xmmword [rbx + rdx*8]"); 0x00443acd movups xmm1, xmmword [rbx + rdx*8 + 0x10] | __asm ("movups xmm1, xmmword [rbx + rdx*8 + 0x10]"); 0x00443ad2 movups xmm2, xmmword [r12 + rdx*8] | __asm ("movups xmm2, xmmword [r12 + rdx*8]"); 0x00443ad7 andnps xmm0, xmm2 | __asm ("andnps xmm0, xmm2"); 0x00443ada movups xmm2, xmmword [r12 + rdx*8 + 0x10] | __asm ("movups xmm2, xmmword [r12 + rdx*8 + 0x10]"); 0x00443ae0 andnps xmm1, xmm2 | __asm ("andnps xmm1, xmm2"); 0x00443ae3 movups xmmword [r12 + rdx*8], xmm0 | __asm ("movups xmmword [r12 + rdx*8], xmm0"); 0x00443ae8 movups xmmword [r12 + rdx*8 + 0x10], xmm1 | __asm ("movups xmmword [r12 + rdx*8 + 0x10], xmm1"); 0x00443aee lea rdx, [rbp + 4] | rdx = rbp + 4; 0x00443af2 or rdx, rax | rdx |= rax; 0x00443af5 movups xmm0, xmmword [rbx + rdx*8] | __asm ("movups xmm0, xmmword [rbx + rdx*8]"); 0x00443af9 movups xmm1, xmmword [rbx + rdx*8 + 0x10] | __asm ("movups xmm1, xmmword [rbx + rdx*8 + 0x10]"); 0x00443afe movups xmm2, xmmword [r12 + rdx*8] | __asm ("movups xmm2, xmmword [r12 + rdx*8]"); 0x00443b03 andnps xmm0, xmm2 | __asm ("andnps xmm0, xmm2"); 0x00443b06 movups xmm2, xmmword [r12 + rdx*8 + 0x10] | __asm ("movups xmm2, xmmword [r12 + rdx*8 + 0x10]"); 0x00443b0c andnps xmm1, xmm2 | __asm ("andnps xmm1, xmm2"); 0x00443b0f movups xmmword [r12 + rdx*8], xmm0 | __asm ("movups xmmword [r12 + rdx*8], xmm0"); 0x00443b14 movups xmmword [r12 + rdx*8 + 0x10], xmm1 | __asm ("movups xmmword [r12 + rdx*8 + 0x10], xmm1"); 0x00443b1a add rbp, 8 | rbp += 8; 0x00443b1e add rsi, 2 | rsi += 2; 0x00443b22 jne 0x443ac3 | | } while (rsi != 0); 0x00443b24 jmp 0x443cad | goto label_33; | label_29: 0x00443b29 xor eax, eax | eax = 0; 0x00443b2b cmp r8, 0x40 | | if (r8 < 0x40) { 0x00443b2f jb 0x443d65 | goto label_26; | } | label_25: 0x00443b35 mov qword [rsp - 0x18], r13 | *((rsp - 0x18)) = r13; 0x00443b3a mov qword [rsp - 0x20], r12 | *((rsp - 0x20)) = r12; 0x00443b3f mov r11d, 0x40 | r11d = 0x40; 0x00443b45 sub r11d, ebx | r11d -= ebx; 0x00443b48 mov r10, 0xffffffffffffffff | r10 = 0xffffffffffffffff; 0x00443b4f mov ecx, ebx | ecx = ebx; 0x00443b51 shl r10, cl | r10 <<= cl; 0x00443b54 mov dword [rsp - 0x28], ebx | *((rsp - 0x28)) = ebx; 0x00443b58 mov r9d, ebx | r9d = ebx; 0x00443b5b mov rbp, r10 | 0x00443b5e not rbp | rbp = ~rbp; 0x00443b61 lea r13, [r8 - 0x40] | r13 = r8 - 0x40; 0x00443b65 shr r13, 6 | r13 >>= 6; 0x00443b69 lea rcx, [r13 + rsi] | rcx = r13 + rsi; 0x00443b6e mov qword [rsp - 0x10], rcx | *((rsp - 0x10)) = rcx; 0x00443b73 mov qword [rsp - 8], rax | *((rsp - 8)) = rax; 0x00443b78 add r15, rax | r15 += rax; 0x00443b7b mov r12, qword [rdi + r15*8] | r12 = *((rdi + r15*8)); 0x00443b7f inc r13 | r13++; 0x00443b82 add r14, rsi | r14 += rsi; 0x00443b85 lea rbx, [rdx + r14*8] | rbx = rdx + r14*8; 0x00443b89 lea rdi, [rdi + r15*8 + 8] | rdi = rdi + r15*8 + 8; 0x00443b8e xor edx, edx | edx = 0; | do { 0x00443b90 mov rsi, qword [rbx + rdx*8] | rsi = *((rbx + rdx*8)); 0x00443b94 mov rax, rsi | rax = *((rbx + rdx*8)); 0x00443b97 not rax | rax = ~rax; 0x00443b9a mov ecx, r9d | ecx = r9d; 0x00443b9d shl rax, cl | rax <<= cl; 0x00443ba0 or rax, rbp | rax |= rbp; 0x00443ba3 and rax, r12 | rax &= r12; 0x00443ba6 mov qword [rdi + rdx*8 - 8], rax | *((rdi + rdx*8 - 8)) = rax; 0x00443bab mov ecx, r11d | ecx = r11d; 0x00443bae shr rsi, cl | rsi >>= cl; 0x00443bb1 not rsi | rsi = ~rsi; 0x00443bb4 or rsi, r10 | rsi |= r10; 0x00443bb7 and rsi, qword [rdi + rdx*8] | rsi &= *((rdi + rdx*8)); 0x00443bbb mov qword [rdi + rdx*8], rsi | *((rdi + rdx*8)) = rsi; 0x00443bbf inc rdx | rdx++; 0x00443bc2 mov r12, rsi | r12 = rsi; 0x00443bc5 cmp r13, rdx | 0x00443bc8 jne 0x443b90 | | } while (r13 != rdx); 0x00443bca mov rsi, qword [rsp - 0x10] | rsi = *((rsp - 0x10)); 0x00443bcf inc rsi | rsi++; 0x00443bd2 and r8d, 0x3f | r8d &= 0x3f; 0x00443bd6 mov rax, qword [rsp - 8] | rax = *((rsp - 8)); 0x00443bdb add rax, rdx | rax += rdx; 0x00443bde mov r12, qword [rsp - 0x20] | r12 = *((rsp - 0x20)); 0x00443be3 mov r13, qword [rsp - 0x18] | r13 = *((rsp - 0x18)); 0x00443be8 mov ebx, dword [rsp - 0x28] | ebx = *((rsp - 0x28)); 0x00443bec jmp 0x443d65 | goto label_26; | label_21: 0x00443bf1 mov r13, rbp | r13 = rbp; 0x00443bf4 inc r10 | r10++; 0x00443bf7 mov r9, r10 | r9 = r10; 0x00443bfa and r9, 0xfffffffffffffffc | r9 &= 0xfffffffffffffffc; 0x00443bfe sub r14, r9 | r14 -= r9; 0x00443c01 mov rcx, r9 | rcx = r9; 0x00443c04 neg rcx | rcx = -rcx; 0x00443c07 mov rax, r9 | rax = r9; 0x00443c0a shl rax, 6 | rax <<= 6; 0x00443c0e sub r8, rax | r8 -= rax; 0x00443c11 lea rbp, [rdx + r12*8 - 0x10] | rbp = rdx + r12*8 - 0x10; 0x00443c16 lea rbx, [rdi + rbx*8 - 0x10] | rbx = rdi + rbx*8 - 0x10; 0x00443c1b xor eax, eax | eax = 0; 0x00443c1d nop dword [rax] | | do { 0x00443c20 movups xmm0, xmmword [rbp + rax*8 - 0x10] | __asm ("movups xmm0, xmmword [rbp + rax*8 - 0x10]"); 0x00443c25 movups xmm1, xmmword [rbp + rax*8] | __asm ("movups xmm1, xmmword [rbp + rax*8]"); 0x00443c2a movups xmm2, xmmword [rbx + rax*8 - 0x10] | __asm ("movups xmm2, xmmword [rbx + rax*8 - 0x10]"); 0x00443c2f andnps xmm0, xmm2 | __asm ("andnps xmm0, xmm2"); 0x00443c32 movups xmm2, xmmword [rbx + rax*8] | __asm ("movups xmm2, xmmword [rbx + rax*8]"); 0x00443c36 andnps xmm1, xmm2 | __asm ("andnps xmm1, xmm2"); 0x00443c39 movups xmmword [rbx + rax*8], xmm1 | __asm ("movups xmmword [rbx + rax*8], xmm1"); 0x00443c3d movups xmmword [rbx + rax*8 - 0x10], xmm0 | __asm ("movups xmmword [rbx + rax*8 - 0x10], xmm0"); 0x00443c42 add rax, 0xfffffffffffffffc | rax += 0xfffffffffffffffc; 0x00443c46 cmp rcx, rax | 0x00443c49 jne 0x443c20 | | } while (rcx != rax); 0x00443c4b cmp r10, r9 | 0x00443c4e mov r10, r11 | r10 = r11; 0x00443c51 mov rbp, r13 | | if (r10 != r9) { 0x00443c54 jne 0x443805 | goto label_1; | } 0x00443c5a jmp 0x44382f | goto label_2; | label_30: 0x00443c5f mov rax, rsi | rax = rsi; 0x00443c62 jmp 0x443d65 | goto label_26; | label_27: 0x00443c67 add r8d, r9d | r8d += r9d; 0x00443c6a mov eax, r9d | eax = r9d; 0x00443c6d mov rdx, 0xffffffffffffffff | rdx = 0xffffffffffffffff; 0x00443c74 mov rdi, 0xffffffffffffffff | rdi = 0xffffffffffffffff; 0x00443c7b mov ecx, r9d | ecx = r9d; 0x00443c7e shl rdi, cl | rdi <<= cl; 0x00443c81 not rdi | rdi = ~rdi; 0x00443c84 mov ecx, r8d | ecx = r8d; 0x00443c87 shl rdx, cl | rdx <<= cl; 0x00443c8a cmp r8d, 0x40 | | if (r8d >= 0x40) { 0x00443c8e jae 0x443e25 | goto label_34; | } | label_7: 0x00443c94 or rdx, rdi | rdx |= rdi; 0x00443c97 not rsi | rsi = ~rsi; 0x00443c9a mov ecx, eax | ecx = eax; 0x00443c9c shl rsi, cl | rsi <<= cl; 0x00443c9f or rsi, rdx | rsi |= rdx; 0x00443ca2 and qword [r12], rsi | *(r12) &= rsi; 0x00443ca6 jmp 0x443df9 | goto label_9; | label_32: 0x00443cab xor ebp, ebp | ebp = 0; | label_33: 0x00443cad test r9b, 1 | 0x00443cb1 mov rax, qword [rsp - 0x28] | rax = *((rsp - 0x28)); | if ((r9b & 1) != 0) { 0x00443cb6 je 0x443ce5 | 0x00443cb8 or rbp, rax | rbp |= rax; 0x00443cbb mov rdx, qword [rsp - 0x18] | rdx = *((rsp - 0x18)); 0x00443cc0 movups xmm0, xmmword [rdx + rbp*8] | __asm ("movups xmm0, xmmword [rdx + rbp*8]"); 0x00443cc4 movups xmm1, xmmword [rdx + rbp*8 + 0x10] | __asm ("movups xmm1, xmmword [rdx + rbp*8 + 0x10]"); 0x00443cc9 movups xmm2, xmmword [r12 + rbp*8] | __asm ("movups xmm2, xmmword [r12 + rbp*8]"); 0x00443cce andnps xmm0, xmm2 | __asm ("andnps xmm0, xmm2"); 0x00443cd1 movups xmm2, xmmword [r12 + rbp*8 + 0x10] | __asm ("movups xmm2, xmmword [r12 + rbp*8 + 0x10]"); 0x00443cd7 andnps xmm1, xmm2 | __asm ("andnps xmm1, xmm2"); 0x00443cda movups xmmword [r12 + rbp*8], xmm0 | __asm ("movups xmmword [r12 + rbp*8], xmm0"); 0x00443cdf movups xmmword [r12 + rbp*8 + 0x10], xmm1 | __asm ("movups xmmword [r12 + rbp*8 + 0x10], xmm1"); | } 0x00443ce5 add rax, r13 | rax += r13; 0x00443ce8 cmp rcx, r13 | 0x00443ceb mov r13, qword [rsp - 0x18] | r13 = *((rsp - 0x18)); 0x00443cf0 mov ebx, 0 | ebx = 0; | if (rcx == r13) { 0x00443cf5 je 0x443d5b | goto label_35; | } | label_31: 0x00443cf7 mov edx, r11d | edx = r11d; 0x00443cfa sub edx, eax | edx -= eax; 0x00443cfc inc edx | edx++; 0x00443cfe mov rsi, rax | rsi = rax; 0x00443d01 test dl, 1 | | if ((dl & 1) != 0) { 0x00443d04 je 0x443d16 | 0x00443d06 lea rsi, [rax + 1] | rsi = rax + 1; 0x00443d0a mov rdx, qword [r13 + rax*8] | rdx = *((r13 + rax*8)); 0x00443d0f not rdx | rdx = ~rdx; 0x00443d12 and qword [r12 + rax*8], rdx | *((r12 + rax*8)) &= rdx; | } 0x00443d16 cmp r11, rax | 0x00443d19 mov rax, rsi | rax = rsi; | if (r11 == rax) { 0x00443d1c je 0x443d5b | goto label_35; | } 0x00443d1e mov rax, qword [rsp - 0x20] | rax = *((rsp - 0x20)); 0x00443d23 lea rdx, [rax + r14*8 + 8] | rdx = rax + r14*8 + 8; 0x00443d28 lea rdi, [rdi + r15*8 + 8] | rdi = rdi + r15*8 + 8; 0x00443d2d mov rax, qword [rsp - 0x28] | rax = *((rsp - 0x28)); 0x00443d32 lea rcx, [rax + r10 + 1] | rcx = rax + r10 + 1; | do { 0x00443d37 mov rbp, qword [rdx + rsi*8 - 8] | rbp = *((rdx + rsi*8 - 8)); 0x00443d3c not rbp | rbp = ~rbp; 0x00443d3f and qword [rdi + rsi*8 - 8], rbp | *((rdi + rsi*8 - 8)) &= rbp; 0x00443d44 lea rax, [rsi + 2] | rax = rsi + 2; 0x00443d48 mov rbp, qword [rdx + rsi*8] | rbp = *((rdx + rsi*8)); 0x00443d4c not rbp | rbp = ~rbp; 0x00443d4f and qword [rdi + rsi*8], rbp | *((rdi + rsi*8)) &= rbp; 0x00443d53 mov rsi, rax | rsi = rax; 0x00443d56 cmp rcx, rax | 0x00443d59 jne 0x443d37 | | } while (rcx != rax); | label_35: 0x00443d5b inc r11 | r11++; 0x00443d5e and r8d, 0x3f | r8d &= 0x3f; 0x00443d62 mov rsi, r11 | rsi = r11; | label_26: 0x00443d65 test r8, r8 | | if (r8 == 0) { 0x00443d68 je 0x443df9 | goto label_9; | } 0x00443d6e mov rbp, qword [r13 + rsi*8] | rbp = *((r13 + rsi*8)); 0x00443d73 mov esi, 0x40 | esi = 0x40; 0x00443d78 sub esi, ebx | esi -= ebx; 0x00443d7a cmp esi, r8d | | if (esi < r8d) { 0x00443d7d jae 0x443dc0 | 0x00443d7f mov r9, 0xffffffffffffffff | r9 = 0xffffffffffffffff; 0x00443d86 mov rdi, 0xffffffffffffffff | rdi = 0xffffffffffffffff; 0x00443d8d mov ecx, ebx | ecx = ebx; 0x00443d8f shl rdi, cl | rdi <<= cl; 0x00443d92 not rdi | rdi = ~rdi; 0x00443d95 mov rdx, rbp | rdx = rbp; 0x00443d98 not rdx | rdx = ~rdx; 0x00443d9b shl rdx, cl | rdx <<= cl; 0x00443d9e or rdx, rdi | rdx |= rdi; 0x00443da1 and qword [r12 + rax*8], rdx | *((r12 + rax*8)) &= rdx; 0x00443da5 mov ecx, esi | ecx = esi; 0x00443da7 shr rbp, cl | rbp >>= cl; 0x00443daa sub r8d, esi | r8d -= esi; 0x00443dad mov ecx, r8d | ecx = r8d; 0x00443db0 shl r9, cl | r9 <<= cl; 0x00443db3 not rbp | rbp = ~rbp; 0x00443db6 or rbp, r9 | rbp |= r9; 0x00443db9 and qword [r12 + rax*8 + 8], rbp | *((r12 + rax*8 + 8)) &= rbp; 0x00443dbe jmp 0x443df9 | goto label_9; | } 0x00443dc0 add r8d, ebx | r8d += ebx; 0x00443dc3 mov edx, ebx | edx = ebx; 0x00443dc5 mov rsi, 0xffffffffffffffff | rsi = 0xffffffffffffffff; 0x00443dcc mov rdi, 0xffffffffffffffff | rdi = 0xffffffffffffffff; 0x00443dd3 mov ecx, ebx | ecx = ebx; 0x00443dd5 shl rdi, cl | rdi <<= cl; 0x00443dd8 not rdi | rdi = ~rdi; 0x00443ddb mov ecx, r8d | ecx = r8d; 0x00443dde shl rsi, cl | rsi <<= cl; 0x00443de1 cmp r8d, 0x40 | 0x00443de5 jae 0x443e19 | | while (1) { 0x00443de7 or rsi, rdi | rsi |= rdi; 0x00443dea not rbp | rbp = ~rbp; 0x00443ded mov ecx, edx | ecx = edx; 0x00443def shl rbp, cl | rbp <<= cl; 0x00443df2 or rbp, rsi | rbp |= rsi; 0x00443df5 and qword [r12 + rax*8], rbp | *((r12 + rax*8)) &= rbp; | label_9: 0x00443df9 pop rbx | 0x00443dfa pop r12 | r12 = rbx; 0x00443dfc pop r13 | r13 = rbx; 0x00443dfe pop r14 | r14 = rbx; 0x00443e00 pop r15 | r15 = rbx; 0x00443e02 pop rbp | 0x00443e03 ret | return rax; | label_22: 0x00443e04 xor ebp, ebp | ebp = 0; 0x00443e06 jmp 0x4438cf | goto label_3; | label_20: 0x00443e0b xor ebx, ebx | ebx = 0; 0x00443e0d jmp 0x44378b | goto label_4; | label_23: 0x00443e12 xor ebp, ebp | ebp = 0; 0x00443e14 jmp 0x44390a | goto label_5; 0x00443e19 xor esi, esi | esi = 0; 0x00443e1b jmp 0x443de7 | | } | label_28: 0x00443e1d xor r10d, r10d | r10d = 0; 0x00443e20 jmp 0x4439cf | goto label_6; | label_34: 0x00443e25 xor edx, edx | edx = 0; 0x00443e27 jmp 0x443c94 | goto label_7; | }