; assembly | /* r2dec pseudo code output */ | /* bdlt_fixutil.t/none @ 0x43be70 */ | #include | ; (fcn) sym._anonymous_namespace_::u::parseTime_char_const__BloombergLP::bdlt::Time__int__bool__char_const__char_const_ () | uint64_t anonymous_namespace_::u::parseTime_char_const_BloombergLP::bdlt::Time_int_bool_char_const_char_const_ (signed int64_t arg6, int64_t arg5, int64_t arg4, int64_t arg3, int64_t arg2, char * arg1) { | uint32_t var_ch; | uint32_t var_10h; | int64_t var_1ch; | int64_t var_20h; | int64_t var_2ch; | int64_t var_30h; | int64_t var_38h; | int64_t var_40h; | uint32_t var_48h; | char * var_50h; | r9 = arg6; | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* (anonymous namespace)::u::parseTime(char const**, BloombergLP::bdlt::Time*, int*, bool*, char const*, char const*) */ 0x0043be70 push rbp | 0x0043be71 push r15 | 0x0043be73 push r14 | 0x0043be75 push r13 | 0x0043be77 push r12 | 0x0043be79 push rbx | 0x0043be7a sub rsp, 0x58 | 0x0043be7e mov rbx, r9 | rbx = r9; 0x0043be81 sub rbx, r8 | rbx -= r8; 0x0043be84 mov ebp, 0xffffffff | 0x0043be89 cmp rbx, 5 | | if (rbx < 5) { 0x0043be8d jl 0x43c1b1 | goto label_0; | } 0x0043be93 mov r14, r9 | r14 = r9; 0x0043be96 mov r15, r8 | r15 = r8; 0x0043be99 mov r13, rdx | r13 = rdx; 0x0043be9c mov r12, rsi | r12 = rsi; 0x0043be9f mov qword [rsp + 0x50], rdi | *((rsp + 0x50)) = rdi; 0x0043bea4 mov qword [rsp + 0x20], rcx | *((rsp + 0x20)) = rcx; 0x0043bea9 call 0x404140 | rax = ctype_b_loc (); 0x0043beae mov rax, qword [rax] | rax = *(rax); 0x0043beb1 movsx rcx, byte [r15] | rcx = *(r15); 0x0043beb5 test byte [rax + rcx*2 + 1], 8 | | if ((*((rax + rcx*2 + 1)) & 8) == 0) { 0x0043beba je 0x43c1b1 | goto label_0; | } 0x0043bec0 movsx rdx, byte [r15 + 1] | rdx = *((r15 + 1)); 0x0043bec5 test byte [rax + rdx*2 + 1], 8 | | if ((*((rax + rdx*2 + 1)) & 8) == 0) { 0x0043beca je 0x43c1b1 | goto label_0; | } 0x0043bed0 lea ecx, [rcx + rcx*4] | ecx = rcx * 5; 0x0043bed3 lea esi, [rdx + rcx*2 - 0x210] | esi = rdx + rcx*2 - 0x210; 0x0043beda cmp esi, 0x17 | | if (esi > 0x17) { 0x0043bedd jg 0x43c1b1 | goto label_0; | } 0x0043bee3 cmp byte [r15 + 2], 0x3a | | if (*((r15 + 2)) != 0x3a) { 0x0043bee8 jne 0x43c1b1 | goto label_0; | } 0x0043beee movsx r10, byte [r15 + 3] | r10 = *((r15 + 3)); 0x0043bef3 test byte [rax + r10*2 + 1], 8 | | if ((*((rax + r10*2 + 1)) & 8) == 0) { 0x0043bef9 je 0x43c1b1 | goto label_0; | } 0x0043beff movsx r11, byte [r15 + 4] | r11 = *((r15 + 4)); 0x0043bf04 test byte [rax + r11*2 + 1], 8 | | if ((*((rax + r11*2 + 1)) & 8) == 0) { 0x0043bf0a je 0x43c1b1 | goto label_0; | } 0x0043bf10 lea rdx, [r15 + 5] | rdx = r15 + 5; 0x0043bf14 mov qword [rsp + 0x10], rdx | *((rsp + 0x10)) = rdx; 0x0043bf19 xor r8d, r8d | r8d = 0; 0x0043bf1c xor ecx, ecx | ecx = 0; 0x0043bf1e cmp rdx, r14 | | if (rdx >= r14) { 0x0043bf21 jae 0x43c086 | goto label_1; | } 0x0043bf27 cmp byte [rdx], 0x3a | 0x0043bf2a mov r9d, 0 | r9d = 0; 0x0043bf30 mov edi, 0 | edi = 0; 0x0043bf35 mov dword [rsp + 0xc], 0 | *((rsp + 0xc)) = 0; | if (*(rdx) != 0x3a) { 0x0043bf3d jne 0x43c093 | goto label_2; | } 0x0043bf43 add rbx, 0xfffffffffffffffa | rbx += 0xfffffffffffffffa; 0x0043bf47 cmp rbx, 2 | | if (rbx < 2) { 0x0043bf4b jl 0x43c1b1 | goto label_0; | } 0x0043bf51 movsx rcx, byte [r15 + 6] | rcx = *((r15 + 6)); 0x0043bf56 test byte [rax + rcx*2 + 1], 8 | | if ((*((rax + rcx*2 + 1)) & 8) == 0) { 0x0043bf5b je 0x43c1b1 | goto label_0; | } 0x0043bf61 movsx r9, byte [r15 + 7] | r9 = *((r15 + 7)); 0x0043bf66 test byte [rax + r9*2 + 1], 8 | | if ((*((rax + r9*2 + 1)) & 8) == 0) { 0x0043bf6c je 0x43c1b1 | goto label_0; | } 0x0043bf72 lea rdx, [r15 + 8] | rdx = r15 + 8; 0x0043bf76 mov qword [rsp + 0x10], rdx | *((rsp + 0x10)) = rdx; 0x0043bf7b xor ebx, ebx | ebx = 0; 0x0043bf7d cmp rdx, r14 | | if (rdx >= r14) { 0x0043bf80 jae 0x43c1c2 | goto label_3; | } 0x0043bf86 cmp byte [rdx], 0x2e | 0x0043bf89 mov edi, 0 | edi = 0; | if (*(rdx) != 0x2e) { 0x0043bf8e jne 0x43c1c4 | goto label_4; | } 0x0043bf94 lea rdx, [r15 + 9] | rdx = r15 + 9; 0x0043bf98 mov qword [rsp + 0x10], rdx | *((rsp + 0x10)) = rdx; 0x0043bf9d cmp rdx, r14 | | if (rdx == r14) { 0x0043bfa0 je 0x43c1b1 | goto label_0; | } 0x0043bfa6 movsx rdi, byte [rdx] | rdi = *(rdx); 0x0043bfaa test byte [rax + rdi*2 + 1], 8 | | if ((*((rax + rdi*2 + 1)) & 8) == 0) { 0x0043bfaf je 0x43c1b1 | goto label_0; | } 0x0043bfb5 lea r8, [r15 + 0x10] | r8 = r15 + 0x10; 0x0043bfb9 cmp r8, r14 | | if (r8 >= r14) { 0x0043bfbc cmovae r8, r14 | r8 = r14; | } 0x0043bfc0 add r15, 0xa | r15 += 0xa; 0x0043bfc4 cmp r8, r15 | | if (r8 <= r15) { 0x0043bfc7 cmovbe r8, r15 | r8 = r15; | } 0x0043bfcb mov ebp, 0x989680 | 0x0043bfd0 xor ebx, ebx | ebx = 0; | do { 0x0043bfd2 mov rdx, r15 | rdx = r15; 0x0043bfd5 lea ebx, [rbx + rbx*4] | ebx = rbx * 5; 0x0043bfd8 movsx edi, dil | edi = (int32_t) dil; 0x0043bfdc lea ebx, [rdi + rbx*2 - 0x30] | ebx = rdi + rbx*2 - 0x30; 0x0043bfe0 movsxd rdi, ebp | rdi = (int64_t) ebp; 0x0043bfe3 imul rbp, rdi, 0x66666667 | rbp = rdi * 0x66666667; 0x0043bfea mov rdi, rbp | rdi = rbp; 0x0043bfed shr rdi, 0x3f | rdi >>= 0x3f; 0x0043bff1 sar rbp, 0x22 | rbp >>= 0x22; 0x0043bff5 add ebp, edi | ebp += edi; 0x0043bff7 cmp r8, r15 | | if (r8 == r15) { 0x0043bffa je 0x43c00b | goto label_5; | } 0x0043bffc movsx rdi, byte [rdx] | rdi = *(rdx); 0x0043c000 lea r15, [rdx + 1] | r15 = rdx + 1; 0x0043c004 test byte [rax + rdi*2 + 1], 8 | 0x0043c009 jne 0x43bfd2 | | } while ((*((rax + rdi*2 + 1)) & 8) != 0); | label_5: 0x0043c00b imul ebx, ebp | ebx *= ebp; 0x0043c00e add ebx, 5 | ebx += 5; 0x0043c011 movsxd rbp, ebx | rbp = (int64_t) ebx; 0x0043c014 imul rbx, rbp, 0x66666667 | rbx = rbp * 0x66666667; 0x0043c01b mov rdi, rbx | rdi = rbx; 0x0043c01e shr rdi, 0x3f | rdi >>= 0x3f; 0x0043c022 sar rbx, 0x22 | rbx >>= 0x22; 0x0043c026 add ebx, edi | ebx += edi; 0x0043c028 cmp rdx, r14 | | if (rdx >= r14) { 0x0043c02b jae 0x43c043 | goto label_6; | } | do { 0x0043c02d movsx rdi, byte [rdx] | rdi = *(rdx); 0x0043c031 test byte [rax + rdi*2 + 1], 8 | | if ((*((rax + rdi*2 + 1)) & 8) == 0) { 0x0043c036 je 0x43c043 | goto label_6; | } 0x0043c038 inc rdx | rdx++; 0x0043c03b cmp r14, rdx | 0x0043c03e jne 0x43c02d | | } while (r14 != rdx); 0x0043c040 mov rdx, r14 | rdx = r14; | label_6: 0x0043c043 mov qword [rsp + 0x10], rdx | *((rsp + 0x10)) = rdx; 0x0043c048 imul rbp, rbp, 0x68db8bad | rbp *= 0x68db8bad; 0x0043c04f mov rax, rbp | rax = rbp; 0x0043c052 shr rax, 0x3f | rax >>= 0x3f; 0x0043c056 sar rbp, 0x2c | rbp >>= 0x2c; 0x0043c05a add ebp, eax | ebp += eax; 0x0043c05c movsxd rbx, ebx | rbx = (int64_t) ebx; 0x0043c05f imul rax, rbx, 0x10624dd3 | rax = rbx * 0x10624dd3; 0x0043c066 mov rdi, rax | rdi = rax; 0x0043c069 shr rdi, 0x3f | rdi >>= 0x3f; 0x0043c06d sar rax, 0x26 | rax >>= 0x26; 0x0043c071 add eax, edi | eax += edi; 0x0043c073 mov rdi, rbp | rdi = rbp; 0x0043c076 imul eax, eax, 0x3e8 | eax *= 0x3e8; 0x0043c07c sub ebx, eax | ebx -= eax; 0x0043c07e xor r8d, r8d | r8d = 0; 0x0043c081 jmp 0x43c1c4 | goto label_4; | label_1: 0x0043c086 xor r9d, r9d | r9d = 0; 0x0043c089 xor edi, edi | edi = 0; 0x0043c08b mov dword [rsp + 0xc], 0 | *((rsp + 0xc)) = 0; | do { | label_2: 0x0043c093 cmp edi, 0x3e8 | 0x0043c099 mov qword [rsp + 0x48], rdi | *((rsp + 0x48)) = rdi; | if (edi != 0x3e8) { 0x0043c09e cmovne r8d, edi | r8d = edi; | } 0x0043c0a2 mov dword [rsp + 0x1c], 0 | *((rsp + 0x1c)) = 0; 0x0043c0aa cmp rdx, r14 | | if (rdx != r14) { 0x0043c0ad je 0x43c109 | 0x0043c0af mov dword [rsp + 0x2c], ecx | *((rsp + 0x2c)) = ecx; 0x0043c0b3 mov qword [rsp + 0x30], r9 | *((rsp + 0x30)) = r9; 0x0043c0b8 mov qword [rsp + 0x38], r11 | *((rsp + 0x38)) = r11; 0x0043c0bd mov qword [rsp + 0x40], r10 | *((rsp + 0x40)) = r10; 0x0043c0c2 mov r15d, r8d | r15d = r8d; 0x0043c0c5 mov ebx, esi | ebx = esi; 0x0043c0c7 lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x0043c0cc lea rsi, [rsp + 0x1c] | rsi = rsp + 0x1c; 0x0043c0d1 mov rcx, r14 | rcx = r14; 0x0043c0d4 call 0x43bcc0 | eax = (anonymousnamespace)::u::parseTimezoneOffset(char const**,int*,char const*,char const*) (); 0x0043c0d9 mov ebp, 0xffffffff | 0x0043c0de test eax, eax | | if (eax != 0) { 0x0043c0e0 jne 0x43c1b1 | goto label_0; | } 0x0043c0e6 cmp qword [rsp + 0x10], r14 | 0x0043c0eb mov esi, ebx | esi = ebx; 0x0043c0ed mov r8d, r15d | r8d = r15d; 0x0043c0f0 mov r10, qword [rsp + 0x40] | r10 = *((rsp + 0x40)); 0x0043c0f5 mov r11, qword [rsp + 0x38] | r11 = *((rsp + 0x38)); 0x0043c0fa mov r9, qword [rsp + 0x30] | r9 = *((rsp + 0x30)); 0x0043c0ff mov ecx, dword [rsp + 0x2c] | ecx = *((rsp + 0x2c)); | if (*((rsp + 0x10)) != r14) { 0x0043c103 jne 0x43c1b1 | goto label_0; | } | } 0x0043c109 lea eax, [r10 + r10*4] | eax = r10 * 5; 0x0043c10d lea edx, [r11 + rax*2 - 0x210] | edx = r11 + rax*2 - 0x210; 0x0043c115 cmp r9d, 0x3e7 | | if (r9d <= 0x3e7) { 0x0043c11c ja 0x43c136 | 0x0043c11e cmp esi, 0x17 | | if (esi > 0x17) { 0x0043c121 ja 0x43c136 | goto label_7; | } 0x0043c123 cmp edx, 0x3b | | if (edx > 0x3b) { 0x0043c126 ja 0x43c136 | goto label_7; | } 0x0043c128 cmp ecx, 0x3b | | if (ecx > 0x3b) { 0x0043c12b ja 0x43c136 | goto label_7; | } 0x0043c12d cmp r8d, 0x3e8 | | if (r8d < 0x3e8) { 0x0043c134 jb 0x43c14c | goto label_8; | } | } | label_7: 0x0043c136 mov ebp, 0xffffffff | 0x0043c13b cmp esi, 0x18 | | if (esi == 0x18) { 0x0043c13e jne 0x43c1b1 | 0x0043c140 mov eax, ecx | eax = ecx; 0x0043c142 or eax, edx | eax |= edx; 0x0043c144 or eax, r9d | eax |= r9d; 0x0043c147 or eax, r8d | eax |= r8d; | if (eax != 0) { 0x0043c14a jne 0x43c1b1 | goto label_0; | } | label_8: 0x0043c14c mov rdi, r12 | 0x0043c14f call 0x43e360 | BloombergLP::bdlt::Time::setTime(int,int,int,int,int) (r12, rsi, rdx, rcx, r8, r9); 0x0043c154 mov eax, dword [rsp + 0x1c] | eax = *((rsp + 0x1c)); 0x0043c158 mov dword [r13], eax | *(r13) = eax; 0x0043c15c mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x0043c161 mov byte [rax], 0 | *(rax) = 0; 0x0043c164 cmp dword [rsp + 0x48], 0x3e8 | | if (*((rsp + 0x48)) == 0x3e8) { 0x0043c16c jne 0x43c186 | 0x0043c16e mov rdi, r12 | 0x0043c171 mov esi, 1 | 0x0043c176 call 0x43d850 | eax = BloombergLP::bdlt::Time::addSeconds(int) (r12, 1); 0x0043c17b cmp eax, 1 | 0x0043c17e mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x0043c183 sete byte [rax] | rax = (eax == 1) ? 1 : 0; | } 0x0043c186 cmp byte [rsp + 0xc], 0 | | if (*((rsp + 0xc)) != 0) { 0x0043c18b je 0x43c1a7 | 0x0043c18d mov rdi, r12 | 0x0043c190 mov esi, 1 | 0x0043c195 call 0x43d850 | eax = BloombergLP::bdlt::Time::addSeconds(int) (r12, 1); 0x0043c19a mov rcx, qword [rsp + 0x20] | rcx = *((rsp + 0x20)); 0x0043c19f cmp eax, 1 | | if (eax != 1) { 0x0043c1a2 jne 0x43c1a7 | goto label_9; | } 0x0043c1a4 mov byte [rcx], 1 | *(rcx) = 1; | } | label_9: 0x0043c1a7 mov rax, qword [rsp + 0x50] | rax = *((rsp + 0x50)); 0x0043c1ac mov qword [rax], r14 | *(rax) = r14; 0x0043c1af xor ebp, ebp | ebp = 0; | } | label_0: 0x0043c1b1 mov eax, ebp | eax = ebp; 0x0043c1b3 add rsp, 0x58 | 0x0043c1b7 pop rbx | 0x0043c1b8 pop r12 | 0x0043c1ba pop r13 | 0x0043c1bc pop r14 | 0x0043c1be pop r15 | 0x0043c1c0 pop rbp | 0x0043c1c1 ret | return rax; | label_3: 0x0043c1c2 xor edi, edi | edi = 0; | label_4: 0x0043c1c4 lea eax, [rcx + rcx*4] | eax = rcx * 5; 0x0043c1c7 lea eax, [r9 + rax*2 - 0x210] | eax = r9 + rax*2 - 0x210; 0x0043c1cf cmp eax, 0x3c | 0x0043c1d2 sete cl | cl = (eax == 0x3c) ? 1 : 0; 0x0043c1d5 mov dword [rsp + 0xc], ecx | *((rsp + 0xc)) = ecx; 0x0043c1d9 mov ecx, 0x3b | ecx = 0x3b; | if (eax != 0x3c) { 0x0043c1de cmovne ecx, eax | ecx = eax; | } 0x0043c1e1 mov r9, rbx | r9 = rbx; 0x0043c1e4 jmp 0x43c093 | | } while (1); | }