; assembly | /* r2dec pseudo code output */ | /* balb_filecleanerutil.t/assume @ 0x414570 */ | #include | ; (fcn) method.BloombergLP::bdlt::DatetimeInterval.printToBuffer_char__int__int__const () | int64_t method_BloombergLP::bdlt::DatetimeInterval_printToBuffer_char_int_int_const (int64_t arg_fh, int64_t arg_14h, int64_t arg4, int64_t arg3, int64_t arg2, signed int64_t arg1) { | int64_t var_8h; | int64_t var_fh; | int64_t var_10h; | int64_t var_14h; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdlt::DatetimeInterval::printToBuffer(char*, int, int) const */ 0x00414570 push rbp | 0x00414571 push r15 | 0x00414573 push r14 | 0x00414575 push rbx | 0x00414576 sub rsp, 0x18 | 0x0041457a mov r11d, ecx | r11d = ecx; 0x0041457d mov r10d, edx | r10d = edx; 0x00414580 mov ecx, dword [rdi] | ecx = *(rdi); 0x00414582 mov r15, qword [rdi + 8] | r15 = *((rdi + 8)); 0x00414586 movabs rdx, 0x98b5bf2c03e529c5 | rdx = 0x98b5bf2c03e529c5; 0x00414590 mov rax, r15 | rax = r15; 0x00414593 imul rdx | rdx:rax = rax * rdx; 0x00414596 mov r8, rdx | r8 = rdx; 0x00414599 add r8, r15 | r8 += r15; 0x0041459c mov rbx, r8 | rbx = r8; 0x0041459f shr rbx, 0x3f | rbx >>= 0x3f; 0x004145a3 shr r8, 0x1f | r8 >>= 0x1f; 0x004145a7 movabs rdx, 0x8f2a633943a6d729 | rdx = 0x8f2a633943a6d729; 0x004145b1 mov rax, r15 | rax = r15; 0x004145b4 imul rdx | rdx:rax = rax * rdx; 0x004145b7 mov r9, rdx | r9 = rdx; 0x004145ba add r8d, ebx | r8d += ebx; 0x004145bd add r9, r15 | r9 += r15; 0x004145c0 mov rax, r9 | rax = r9; 0x004145c3 shr rax, 0x3f | rax >>= 0x3f; 0x004145c7 sar r9, 0x19 | r9 >>= 0x19; 0x004145cb add r9, rax | r9 += rax; 0x004145ce movabs rbx, 0x8888888888888889 | rbx = 0x8888888888888889; 0x004145d8 mov rax, r9 | rax = r9; 0x004145db imul rbx | rdx:rax = rax * rbx; 0x004145de add rdx, r9 | rdx += r9; 0x004145e1 mov rax, rdx | rax = rdx; 0x004145e4 shr rax, 0x3f | rax >>= 0x3f; 0x004145e8 shr rdx, 5 | rdx >>= 5; 0x004145ec add edx, eax | edx += eax; 0x004145ee imul ebp, edx, 0x3c | ebp = edx * 0x3c; 0x004145f1 movabs rdx, 0x431bde82d7b634db | rdx = 0x431bde82d7b634db; 0x004145fb mov rax, r15 | rax = r15; 0x004145fe imul rdx | rdx:rax = rax * rdx; 0x00414601 mov r14, rdx | r14 = rdx; 0x00414604 sub r9d, ebp | r9d -= ebp; 0x00414607 mov rax, rdx | rax = rdx; 0x0041460a shr rax, 0x3f | rax >>= 0x3f; 0x0041460e sar r14, 0x12 | r14 >>= 0x12; 0x00414612 add r14, rax | r14 += rax; 0x00414615 mov rax, r14 | rax = r14; 0x00414618 imul rbx | rdx:rax = rax * rbx; 0x0041461b add rdx, r14 | rdx += r14; 0x0041461e mov rax, rdx | rax = rdx; 0x00414621 shr rax, 0x3f | rax >>= 0x3f; 0x00414625 shr rdx, 5 | rdx >>= 5; 0x00414629 add edx, eax | edx += eax; 0x0041462b imul eax, edx, 0x3c | eax = edx * 0x3c; 0x0041462e sub r14d, eax | r14d -= eax; 0x00414631 movabs rbp, 0x20c49ba5e353f7cf | 0x0041463b mov rax, r15 | rax = r15; 0x0041463e imul rbp | rdx:rax = rax * rbp; 0x00414641 mov rbx, rdx | rbx = rdx; 0x00414644 mov rax, rdx | rax = rdx; 0x00414647 shr rax, 0x3f | rax >>= 0x3f; 0x0041464b sar rbx, 7 | rbx >>= 7; 0x0041464f add rbx, rax | rbx += rax; 0x00414652 mov rax, rbx | rax = rbx; 0x00414655 imul rbp | rdx:rax = rax * rbp; 0x00414658 mov rax, rdx | rax = rdx; 0x0041465b shr rax, 0x3f | rax >>= 0x3f; 0x0041465f shr rdx, 7 | rdx >>= 7; 0x00414663 add edx, eax | edx += eax; 0x00414665 imul eax, edx, 0x3e8 | eax = edx * 0x3e8; 0x0041466b imul edx, ebx, 0x3e8 | edx = ebx * 0x3e8; 0x00414671 sub ebx, eax | ebx -= eax; 0x00414673 mov eax, r15d | eax = r15d; 0x00414676 sub eax, edx | eax -= edx; 0x00414678 test ecx, ecx | | if (ecx < 0) { 0x0041467a js 0x4146ee | goto label_0; | } 0x0041467c cmp r10d, 2 | | if (r10d >= 2) { 0x00414680 jb 0x41469f | 0x00414682 shr r15, 0x3f | r15 >>= 0x3f; 0x00414686 add r15b, r15b | r15b += r15b; 0x00414689 add r15b, 0x2b | r15b += 0x2b; 0x0041468d mov byte [rsi], r15b | *(rsi) = r15b; 0x00414690 inc rsi | rsi++; 0x00414693 dec r10d | r10d--; 0x00414696 cmp dword [rdi], 0 | | if (*(rdi) < 0) { 0x00414699 js 0x414749 | goto label_1; | } | } 0x0041469f mov ebp, 1 | 0x004146a4 cmp qword [rdi + 8], 0 | | if (*((rdi + 8)) < 0) { 0x004146a9 js 0x41474e | goto label_2; | } 0x004146af cmp r11d, 5 | | if (r11d > 5) { 0x004146b3 ja 0x414765 | goto label_3; | } | do { 0x004146b9 mov edx, r11d | edx = r11d; | /* switch table (6 cases) at 0x4540d0 */ 0x004146bc jmp qword [rdx*8 + 0x4540d0] | 0x004146c3 movaps xmm0, xmmword [rip + 0x3fa36] | xmm0 = "%d_%02d:%02d:%02d"; 0x004146ca movaps xmmword [rsp], xmm0 | *(rsp) = xmm0; 0x004146ce mov word [rsp + 0x10], 0x64 | *((rsp + 0x10)) = 0x64; 0x004146d5 mov eax, r10d | eax = r10d; 0x004146d8 sub rsp, 8 | 0x004146dc lea rdx, [rsp + 8] | rdx = rsp + 8; 0x004146e1 mov rdi, rsi | rdi = rsi; 0x004146e4 mov rsi, rax | rsi = rax; 0x004146e7 xor eax, eax | eax = 0; 0x004146e9 jmp 0x41479f | goto label_4; | label_0: 0x004146ee xor ebp, ebp | ebp = 0; 0x004146f0 jmp 0x41474e | goto label_2; 0x004146f2 movsx eax, bx | eax = (int32_t) bx; 0x004146f5 imul ebx, eax, 0x147b | ebx = eax * 0x147b; 0x004146fb mov eax, ebx | eax = ebx; 0x004146fd shr eax, 0x1f | eax >>= 0x1f; 0x00414700 sar ebx, 0x13 | ebx >>= 0x13; 0x00414703 jmp 0x41476b | goto label_5; 0x00414705 movsx eax, bx | eax = (int32_t) bx; 0x00414708 imul ebx, eax, 0x6667 | ebx = eax * 0x6667; 0x0041470e mov eax, ebx | eax = ebx; 0x00414710 shr eax, 0x1f | eax >>= 0x1f; 0x00414713 sar ebx, 0x12 | ebx >>= 0x12; 0x00414716 jmp 0x41476b | goto label_5; 0x00414718 lea edx, [rbx + rbx*4] | edx = rbx * 5; 0x0041471b cwde | eax = (int32_t) ax; 0x0041471c imul eax, eax, 0x147b | eax *= 0x147b; 0x00414722 mov edi, eax | edi = eax; 0x00414724 shr edi, 0x1f | edi >>= 0x1f; 0x00414727 sar eax, 0x13 | eax >>= 0x13; 0x0041472a add eax, edi | eax += edi; 0x0041472c lea ebx, [rax + rdx*2] | ebx = rax + rdx*2; 0x0041472f jmp 0x41476d | goto label_6; 0x00414731 imul edx, ebx, 0x64 | edx = ebx * 0x64; 0x00414734 cwde | eax = (int32_t) ax; 0x00414735 imul ebx, eax, 0x6667 | ebx = eax * 0x6667; 0x0041473b mov eax, ebx | eax = ebx; 0x0041473d shr eax, 0x1f | eax >>= 0x1f; 0x00414740 sar ebx, 0x12 | ebx >>= 0x12; 0x00414743 add ebx, eax | ebx += eax; 0x00414745 add ebx, edx | ebx += edx; 0x00414747 jmp 0x41476d | goto label_6; | label_1: 0x00414749 mov ebp, 1 | | label_2: 0x0041474e neg r8d | r8d = -r8d; 0x00414751 neg r9d | r9d = -r9d; 0x00414754 neg r14d | r14d = -r14d; 0x00414757 neg ebx | ebx = -ebx; 0x00414759 neg eax | eax = -eax; 0x0041475b cmp r11d, 5 | 0x0041475f jbe 0x4146b9 | | } while (r11d <= 5); | label_3: 0x00414765 imul ebx, ebx, 0x3e8 | ebx *= 0x3e8; | label_5: 0x0041476b add ebx, eax | ebx += eax; | label_6: 0x0041476d movabs rax, 0x645830252e6432 | rax = 0x645830252e6432; 0x00414777 mov qword [rsp + 0xf], rax | *((rsp + 0xf)) = rax; 0x0041477c movaps xmm0, xmmword [rip + 0x3f99d] | xmm0 = "%d_%02d:%02d:%02d.%0Xd"; 0x00414783 movaps xmmword [rsp], xmm0 | *(rsp) = xmm0; 0x00414787 or r11b, 0x30 | r11b |= 0x30; 0x0041478b mov byte [rsp + 0x14], r11b | *((rsp + 0x14)) = r11b; 0x00414790 mov eax, r10d | eax = r10d; 0x00414793 mov rdx, rsp | 0x00414796 mov rdi, rsi | 0x00414799 mov rsi, rax | 0x0041479c xor eax, eax | eax = 0; 0x0041479e push rbx | | label_4: 0x0041479f push r14 | 0x004147a1 call 0x404810 | eax = snprintf (rsi, rax, rsp, rcx); 0x004147a6 add rsp, 0x10 | 0x004147aa add eax, ebp | eax += ebp; 0x004147ac add rsp, 0x18 | 0x004147b0 pop rbx | 0x004147b1 pop r14 | 0x004147b3 pop r15 | 0x004147b5 pop rbp | 0x004147b6 ret | return rax; | }