; assembly | /* r2dec pseudo code output */ | /* balb_filecleanerutil.t/none @ 0x414780 */ | #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 */ 0x00414780 push rbp | 0x00414781 push r15 | 0x00414783 push r14 | 0x00414785 push rbx | 0x00414786 sub rsp, 0x18 | 0x0041478a mov r11d, ecx | r11d = ecx; 0x0041478d mov r9d, edx | r9d = edx; 0x00414790 mov ecx, dword [rdi] | ecx = *(rdi); 0x00414792 mov r15, qword [rdi + 8] | r15 = *((rdi + 8)); 0x00414796 movabs rdx, 0x98b5bf2c03e529c5 | rdx = 0x98b5bf2c03e529c5; 0x004147a0 mov rax, r15 | rax = r15; 0x004147a3 imul rdx | rdx:rax = rax * rdx; 0x004147a6 mov r8, rdx | r8 = rdx; 0x004147a9 add r8, r15 | r8 += r15; 0x004147ac mov rbx, r8 | rbx = r8; 0x004147af shr rbx, 0x3f | rbx >>= 0x3f; 0x004147b3 shr r8, 0x1f | r8 >>= 0x1f; 0x004147b7 movabs rdx, 0x8f2a633943a6d729 | rdx = 0x8f2a633943a6d729; 0x004147c1 mov rax, r15 | rax = r15; 0x004147c4 imul rdx | rdx:rax = rax * rdx; 0x004147c7 mov r10, rdx | r10 = rdx; 0x004147ca add r8d, ebx | r8d += ebx; 0x004147cd add r10, r15 | r10 += r15; 0x004147d0 mov rax, r10 | rax = r10; 0x004147d3 shr rax, 0x3f | rax >>= 0x3f; 0x004147d7 sar r10, 0x19 | r10 >>= 0x19; 0x004147db add r10, rax | r10 += rax; 0x004147de movabs rbx, 0x8888888888888889 | rbx = 0x8888888888888889; 0x004147e8 mov rax, r10 | rax = r10; 0x004147eb imul rbx | rdx:rax = rax * rbx; 0x004147ee add rdx, r10 | rdx += r10; 0x004147f1 mov rax, rdx | rax = rdx; 0x004147f4 shr rax, 0x3f | rax >>= 0x3f; 0x004147f8 shr rdx, 5 | rdx >>= 5; 0x004147fc add edx, eax | edx += eax; 0x004147fe imul ebp, edx, 0x3c | ebp = edx * 0x3c; 0x00414801 movabs rdx, 0x431bde82d7b634db | rdx = 0x431bde82d7b634db; 0x0041480b mov rax, r15 | rax = r15; 0x0041480e imul rdx | rdx:rax = rax * rdx; 0x00414811 mov r14, rdx | r14 = rdx; 0x00414814 sub r10d, ebp | r10d -= ebp; 0x00414817 mov rax, rdx | rax = rdx; 0x0041481a shr rax, 0x3f | rax >>= 0x3f; 0x0041481e sar r14, 0x12 | r14 >>= 0x12; 0x00414822 add r14, rax | r14 += rax; 0x00414825 mov rax, r14 | rax = r14; 0x00414828 imul rbx | rdx:rax = rax * rbx; 0x0041482b add rdx, r14 | rdx += r14; 0x0041482e mov rax, rdx | rax = rdx; 0x00414831 shr rax, 0x3f | rax >>= 0x3f; 0x00414835 shr rdx, 5 | rdx >>= 5; 0x00414839 add edx, eax | edx += eax; 0x0041483b imul eax, edx, 0x3c | eax = edx * 0x3c; 0x0041483e sub r14d, eax | r14d -= eax; 0x00414841 movabs rbp, 0x20c49ba5e353f7cf | 0x0041484b mov rax, r15 | rax = r15; 0x0041484e imul rbp | rdx:rax = rax * rbp; 0x00414851 mov rbx, rdx | rbx = rdx; 0x00414854 mov rax, rdx | rax = rdx; 0x00414857 shr rax, 0x3f | rax >>= 0x3f; 0x0041485b sar rbx, 7 | rbx >>= 7; 0x0041485f add rbx, rax | rbx += rax; 0x00414862 mov rax, rbx | rax = rbx; 0x00414865 imul rbp | rdx:rax = rax * rbp; 0x00414868 mov rax, rdx | rax = rdx; 0x0041486b shr rax, 0x3f | rax >>= 0x3f; 0x0041486f shr rdx, 7 | rdx >>= 7; 0x00414873 add edx, eax | edx += eax; 0x00414875 imul eax, edx, 0x3e8 | eax = edx * 0x3e8; 0x0041487b imul edx, ebx, 0x3e8 | edx = ebx * 0x3e8; 0x00414881 sub ebx, eax | ebx -= eax; 0x00414883 mov eax, r15d | eax = r15d; 0x00414886 sub eax, edx | eax -= edx; 0x00414888 test ecx, ecx | | if (ecx < 0) { 0x0041488a js 0x414901 | goto label_0; | } 0x0041488c cmp r9d, 2 | | if (r9d >= 2) { 0x00414890 jl 0x4148af | 0x00414892 shr r15, 0x3f | r15 >>= 0x3f; 0x00414896 add r15b, r15b | r15b += r15b; 0x00414899 add r15b, 0x2b | r15b += 0x2b; 0x0041489d mov byte [rsi], r15b | *(rsi) = r15b; 0x004148a0 inc rsi | rsi++; 0x004148a3 dec r9d | r9d--; 0x004148a6 cmp dword [rdi], 0 | | if (*(rdi) < 0) { 0x004148a9 js 0x41495c | goto label_1; | } | } 0x004148af mov ebp, 1 | 0x004148b4 cmp qword [rdi + 8], 0 | | if (*((rdi + 8)) < 0) { 0x004148b9 js 0x414961 | goto label_2; | } 0x004148bf cmp r11d, 5 | | if (r11d > 5) { 0x004148c3 ja 0x414978 | goto label_3; | } | do { 0x004148c9 mov edx, r11d | edx = r11d; | /* switch table (6 cases) at 0x454300 */ 0x004148cc jmp qword [rdx*8 + 0x454300] | 0x004148d3 movaps xmm0, xmmword [rip + 0x3fa56] | xmm0 = "%d_%02d:%02d:%02d"; 0x004148da movaps xmmword [rsp], xmm0 | *(rsp) = xmm0; 0x004148de mov word [rsp + 0x10], 0x64 | *((rsp + 0x10)) = 0x64; 0x004148e5 movsxd rax, r9d | rax = (int64_t) r9d; 0x004148e8 sub rsp, 8 | 0x004148ec lea rdx, [rsp + 8] | rdx = rsp + 8; 0x004148f1 mov rdi, rsi | rdi = rsi; 0x004148f4 mov rsi, rax | rsi = rax; 0x004148f7 mov r9d, r10d | r9d = r10d; 0x004148fa xor eax, eax | eax = 0; 0x004148fc jmp 0x4149b5 | goto label_4; | label_0: 0x00414901 xor ebp, ebp | ebp = 0; 0x00414903 jmp 0x414961 | goto label_2; 0x00414905 movsx eax, bx | eax = (int32_t) bx; 0x00414908 imul ebx, eax, 0x147b | ebx = eax * 0x147b; 0x0041490e mov eax, ebx | eax = ebx; 0x00414910 shr eax, 0x1f | eax >>= 0x1f; 0x00414913 sar ebx, 0x13 | ebx >>= 0x13; 0x00414916 jmp 0x41497e | goto label_5; 0x00414918 movsx eax, bx | eax = (int32_t) bx; 0x0041491b imul ebx, eax, 0x6667 | ebx = eax * 0x6667; 0x00414921 mov eax, ebx | eax = ebx; 0x00414923 shr eax, 0x1f | eax >>= 0x1f; 0x00414926 sar ebx, 0x12 | ebx >>= 0x12; 0x00414929 jmp 0x41497e | goto label_5; 0x0041492b lea edx, [rbx + rbx*4] | edx = rbx * 5; 0x0041492e cwde | eax = (int32_t) ax; 0x0041492f imul eax, eax, 0x147b | eax *= 0x147b; 0x00414935 mov edi, eax | edi = eax; 0x00414937 shr edi, 0x1f | edi >>= 0x1f; 0x0041493a sar eax, 0x13 | eax >>= 0x13; 0x0041493d add eax, edi | eax += edi; 0x0041493f lea ebx, [rax + rdx*2] | ebx = rax + rdx*2; 0x00414942 jmp 0x414980 | goto label_6; 0x00414944 imul edx, ebx, 0x64 | edx = ebx * 0x64; 0x00414947 cwde | eax = (int32_t) ax; 0x00414948 imul ebx, eax, 0x6667 | ebx = eax * 0x6667; 0x0041494e mov eax, ebx | eax = ebx; 0x00414950 shr eax, 0x1f | eax >>= 0x1f; 0x00414953 sar ebx, 0x12 | ebx >>= 0x12; 0x00414956 add ebx, eax | ebx += eax; 0x00414958 add ebx, edx | ebx += edx; 0x0041495a jmp 0x414980 | goto label_6; | label_1: 0x0041495c mov ebp, 1 | | label_2: 0x00414961 neg r8d | r8d = -r8d; 0x00414964 neg r10d | r10d = -r10d; 0x00414967 neg r14d | r14d = -r14d; 0x0041496a neg ebx | ebx = -ebx; 0x0041496c neg eax | eax = -eax; 0x0041496e cmp r11d, 5 | 0x00414972 jbe 0x4148c9 | | } while (r11d <= 5); | label_3: 0x00414978 imul ebx, ebx, 0x3e8 | ebx *= 0x3e8; | label_5: 0x0041497e add ebx, eax | ebx += eax; | label_6: 0x00414980 movabs rax, 0x645830252e6432 | rax = 0x645830252e6432; 0x0041498a mov qword [rsp + 0xf], rax | *((rsp + 0xf)) = rax; 0x0041498f movaps xmm0, xmmword [rip + 0x3f9ba] | xmm0 = "%d_%02d:%02d:%02d.%0Xd"; 0x00414996 movaps xmmword [rsp], xmm0 | *(rsp) = xmm0; 0x0041499a add r11b, 0x30 | r11b += 0x30; 0x0041499e mov byte [rsp + 0x14], r11b | *((rsp + 0x14)) = r11b; 0x004149a3 movsxd rax, r9d | rax = (int64_t) r9d; 0x004149a6 mov rdx, rsp | 0x004149a9 mov rdi, rsi | 0x004149ac mov rsi, rax | 0x004149af mov r9d, r10d | r9d = r10d; 0x004149b2 xor eax, eax | eax = 0; 0x004149b4 push rbx | | label_4: 0x004149b5 push r14 | 0x004149b7 call 0x404810 | eax = snprintf (rsi, rax, rsp, rcx); 0x004149bc add rsp, 0x10 | 0x004149c0 add eax, ebp | eax += ebp; 0x004149c2 add rsp, 0x18 | 0x004149c6 pop rbx | 0x004149c7 pop r14 | 0x004149c9 pop r15 | 0x004149cb pop rbp | 0x004149cc ret | return rax; | }