; assembly | /* r2dec pseudo code output */ | /* baljsn_datumutil.t/assume @ 0x4463e0 */ | #include | ; (fcn) method.BloombergLP::bdlb::BitStringUtil.areEqual_unsigned_long_const__unsigned_long__unsigned_long_const__unsigned_long__unsigned_long_ () | int64_t method_BloombergLP::bdlb::BitStringUtil_areEqual_unsigned_long_const_unsigned_long_unsigned_long_const_unsigned_long_unsigned_long_ (uint32_t arg5, uint32_t arg4, int64_t arg3, int64_t arg2, int64_t arg1) { | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlb::BitStringUtil::areEqual(unsigned long const*, unsigned long, unsigned long const*, unsigned long, unsigned long) */ 0x004463e0 push rbp | 0x004463e1 push r14 | 0x004463e3 push rbx | 0x004463e4 mov al, 1 | al = 1; 0x004463e6 test r8, r8 | | if (r8 == 0) { 0x004463e9 je 0x4465bf | goto label_1; | } 0x004463ef mov rbx, rsi | rbx = rsi; 0x004463f2 shr rsi, 6 | rsi >>= 6; 0x004463f6 lea r11, [rdi + rsi*8] | r11 = rdi + rsi*8; 0x004463fa and ebx, 0x3f | ebx &= 0x3f; 0x004463fd mov edi, 0x40 | edi = 0x40; 0x00446402 mov r14d, 0x40 | r14d = 0x40; 0x00446408 sub r14d, ebx | r14d -= ebx; 0x0044640b mov rsi, rcx | rsi = rcx; 0x0044640e shr rsi, 6 | rsi >>= 6; 0x00446412 lea r10, [rdx + rsi*8] | r10 = rdx + rsi*8; 0x00446416 and ecx, 0x3f | ecx &= 0x3f; 0x00446419 cmp ebx, ecx | | if (ebx != ecx) { 0x0044641b jne 0x4464c2 | goto label_2; | } 0x00446421 mov edx, r14d | edx = r14d; 0x00446424 cmp rdx, r8 | | if (rdx > r8) { 0x00446427 cmova rdx, r8 | rdx = r8; | } 0x0044642b mov rdi, qword [r10] | rdi = *(r10); 0x0044642e xor rdi, qword [r11] | rdi ^= *(r11); 0x00446431 mov ecx, ebx | ecx = ebx; 0x00446433 shr rdi, cl | rdi >>= cl; 0x00446436 mov rbp, 0xffffffffffffffff | 0x0044643d mov rsi, 0xffffffffffffffff | rsi = 0xffffffffffffffff; 0x00446444 mov ecx, edx | ecx = edx; 0x00446446 shl rsi, cl | rsi <<= cl; 0x00446449 cmp edx, 0x3f | | if (edx <= 0x3f) { 0x0044644c ja 0x446454 | 0x0044644e not rsi | rsi = ~rsi; 0x00446451 mov rbp, rsi | | } 0x00446454 test rdi, rbp | | if ((rdi & rbp) != 0) { 0x00446457 jne 0x446514 | goto label_3; | } 0x0044645d sub r8, rdx | r8 -= rdx; | if (r8 == 0) { 0x00446460 je 0x4465c1 | goto label_4; | } 0x00446466 cmp r8, 0x40 | | if (r8 < 0x40) { 0x0044646a jb 0x44649f | goto label_5; | } 0x0044646c xor ecx, ecx | ecx = 0; 0x0044646e nop | | do { 0x00446470 mov rax, qword [r11 + rcx + 8] | rax = *((r11 + rcx + 8)); 0x00446475 cmp rax, qword [r10 + rcx + 8] | | if (rax != *((r10 + rcx + 8))) { 0x0044647a jne 0x446514 | goto label_3; | } 0x00446480 add r8, 0xffffffffffffffc0 | r8 += 0xffffffffffffffc0; 0x00446484 add rcx, 8 | rcx += 8; 0x00446488 cmp r8, 0x3f | 0x0044648c ja 0x446470 | | } while (r8 > 0x3f); 0x0044648e mov al, 1 | al = 1; 0x00446490 test r8, r8 | | if (r8 == 0) { 0x00446493 je 0x4465c1 | goto label_4; | } 0x00446499 add r11, rcx | r11 += rcx; 0x0044649c add r10, rcx | r10 += rcx; | label_5: 0x0044649f mov rax, qword [r10 + 8] | rax = *((r10 + 8)); 0x004464a3 xor rax, qword [r11 + 8] | rax ^= *((r11 + 8)); 0x004464a7 mov rdx, 0xffffffffffffffff | rdx = 0xffffffffffffffff; 0x004464ae mov ecx, r8d | ecx = r8d; 0x004464b1 shl rdx, cl | rdx <<= cl; 0x004464b4 not rdx | rdx = ~rdx; 0x004464b7 test rax, rdx | 0x004464ba sete al | al = ((rax & rdx) == 0) ? 1 : 0; 0x004464bd jmp 0x4465c1 | goto label_4; | label_2: 0x004464c2 sub edi, ecx | edi -= ecx; 0x004464c4 cmp ecx, ebx | | if (ecx > ebx) { 0x004464c6 jbe 0x4464d1 | 0x004464c8 mov eax, ecx | eax = ecx; 0x004464ca mov edx, edi | edx = edi; 0x004464cc mov r9, r11 | r9 = r11; 0x004464cf jmp 0x4464e1 | | } else { 0x004464d1 mov eax, ebx | eax = ebx; 0x004464d3 mov edx, r14d | edx = r14d; 0x004464d6 mov ebx, ecx | ebx = ecx; 0x004464d8 mov r14d, edi | r14d = edi; 0x004464db mov r9, r10 | r9 = r10; 0x004464de mov r10, r11 | r10 = r11; | } 0x004464e1 mov edx, edx | 0x004464e3 cmp rdx, r8 | | if (rdx > r8) { 0x004464e6 cmova rdx, r8 | rdx = r8; | } 0x004464ea mov rsi, qword [r10] | rsi = *(r10); 0x004464ed mov ecx, eax | ecx = eax; 0x004464ef shr rsi, cl | rsi >>= cl; 0x004464f2 mov rdi, qword [r9] | rdi = *(r9); 0x004464f5 mov rax, rdi | rax = *(r9); 0x004464f8 mov ecx, ebx | ecx = ebx; 0x004464fa shr rax, cl | rax >>= cl; 0x004464fd mov rbp, 0xffffffffffffffff | 0x00446504 mov ecx, edx | ecx = edx; 0x00446506 shl rbp, cl | rbp <<= cl; 0x00446509 xor rax, rsi | rax ^= rsi; 0x0044650c not rbp | rbp = ~rbp; 0x0044650f test rax, rbp | 0x00446512 je 0x44651b | | while ((rdi & rdx) != 0) { | label_3: 0x00446514 xor eax, eax | eax = 0; 0x00446516 jmp 0x4465c1 | goto label_4; 0x0044651b add ebx, edx | ebx += edx; 0x0044651d mov r11d, 8 | r11d = 8; 0x00446523 mov ecx, edx | ecx = edx; 0x00446525 nop word cs:[rax + rax] | 0x0044652f nop | | label_0: 0x00446530 sub r8, rdx | r8 -= rdx; | if (r8 == 0) { 0x00446533 je 0x4465bf | goto label_1; | } 0x00446539 sub r14d, ecx | r14d -= ecx; 0x0044653c movsxd rax, r14d | rax = (int64_t) r14d; 0x0044653f cmp r8, rax | | if (r8 < rax) { 0x00446542 cmovb rax, r8 | rax = r8; | } 0x00446546 mov ecx, ebx | ecx = ebx; 0x00446548 shr rdi, cl | rdi >>= cl; 0x0044654b mov rbp, qword [r10 + r11] | rbp = *((r10 + r11)); 0x0044654f xor rdi, rbp | rdi ^= rbp; 0x00446552 mov rdx, 0xffffffffffffffff | rdx = 0xffffffffffffffff; 0x00446559 mov rsi, 0xffffffffffffffff | rsi = 0xffffffffffffffff; 0x00446560 mov ecx, eax | ecx = eax; 0x00446562 shl rsi, cl | rsi <<= cl; 0x00446565 cmp eax, 0x3f | | if (eax <= 0x3f) { 0x00446568 ja 0x446570 | 0x0044656a not rsi | rsi = ~rsi; 0x0044656d mov rdx, rsi | rdx = rsi; | } 0x00446570 test rdi, rdx | 0x00446573 jne 0x446514 | | } 0x00446575 mov ecx, eax | ecx = eax; 0x00446577 sub r8, rcx | r8 -= rcx; | if (r8 == 0) { 0x0044657a je 0x4465bf | goto label_1; | } 0x0044657c mov r14d, 0x40 | r14d = 0x40; 0x00446582 mov ebx, 0x40 | ebx = 0x40; 0x00446587 sub ebx, eax | ebx -= eax; 0x00446589 cmp r8, rbx | | if (r8 < rbx) { 0x0044658c cmovb rbx, r8 | rbx = r8; | } 0x00446590 mov rdi, qword [r9 + r11] | rdi = *((r9 + r11)); 0x00446594 shr rbp, cl | rbp >>= cl; 0x00446597 xor rbp, rdi | rbp ^= rdi; 0x0044659a mov rsi, 0xffffffffffffffff | rsi = 0xffffffffffffffff; 0x004465a1 mov ecx, ebx | ecx = ebx; 0x004465a3 shl rsi, cl | rsi <<= cl; 0x004465a6 not rsi | rsi = ~rsi; 0x004465a9 add r11, 8 | r11 += 8; 0x004465ad xor eax, eax | eax = 0; 0x004465af mov ecx, ebx | ecx = ebx; 0x004465b1 mov rdx, rbx | rdx = rbx; 0x004465b4 test rbp, rsi | | if ((rbp & rsi) == 0) { 0x004465b7 je 0x446530 | goto label_0; | } 0x004465bd jmp 0x4465c1 | goto label_4; | label_1: 0x004465bf mov al, 1 | al = 1; | label_4: 0x004465c1 pop rbx | 0x004465c2 pop r14 | r14 = rbx; 0x004465c4 pop rbp | 0x004465c5 ret | return rax; | }