; assembly | /* r2dec pseudo code output */ | /* balcl_commandline.t/none @ 0x45ffa0 */ | #include | ; (fcn) fcn.0045ffa0 () | int64_t fcn_0045ffa0 (uint32_t arg3, int64_t arg2, int64_t arg1) { | char * var_8h; | char * var_10h; | int64_t var_18h; | char * var_20h; | int64_t var_28h; | rdx = arg3; | rsi = arg2; | rdi = arg1; 0x0045ffa0 push r15 | 0x0045ffa2 push r14 | 0x0045ffa4 push rbx | 0x0045ffa5 sub rsp, 0x30 | 0x0045ffa9 dec edx | edx--; 0x0045ffab cmp edx, 0x10 | | if (edx > 0x10) { 0x0045ffae ja 0x460403 | goto label_2; | } 0x0045ffb4 mov rbx, rdi | rbx = rdi; | /* switch table (17 cases) at 0x4af7c8 */ 0x0045ffb7 jmp qword [rdx*8 + 0x4af7c8] | 0x0045ffbe mov rax, qword [rsi] | rax = *(rsi); 0x0045ffc1 movzx ecx, word [rbx] | ecx = *(rbx); 0x0045ffc4 mov word [rax], cx | *(rax) = cx; 0x0045ffc7 jmp 0x460403 | goto label_2; 0x0045ffcc mov rax, qword [rsi] | rax = *(rsi); 0x0045ffcf mov cl, byte [rbx + 8] | cl = *((rbx + 8)); 0x0045ffd2 mov byte [rax + 8], cl | *((rax + 8)) = cl; 0x0045ffd5 mov rcx, qword [rbx] | rcx = *(rbx); 0x0045ffd8 mov qword [rax], rcx | *(rax) = rcx; 0x0045ffdb jmp 0x460403 | goto label_2; 0x0045ffe0 mov rax, qword [rsi] | rax = *(rsi); 0x0045ffe3 mov cl, byte [rbx + 4] | cl = *((rbx + 4)); 0x0045ffe6 mov byte [rax + 4], cl | *((rax + 4)) = cl; 0x0045ffe9 mov ecx, dword [rbx] | ecx = *(rbx); 0x0045ffeb mov dword [rax], ecx | *(rax) = ecx; 0x0045ffed jmp 0x460403 | goto label_2; 0x0045fff2 mov rdi, rsi | rdi = rsi; 0x0045fff5 mov rsi, rbx | rsi = rbx; 0x0045fff8 add rsp, 0x30 | 0x0045fffc pop rbx | 0x0045fffd pop r14 | 0x0045ffff pop r15 | 0x00460001 jmp 0x460630 | void (*0x460630)() (); 0x00460006 mov rdi, rsi | rdi = rsi; 0x00460009 mov rsi, rbx | rsi = rbx; 0x0046000c add rsp, 0x30 | 0x00460010 pop rbx | 0x00460011 pop r14 | 0x00460013 pop r15 | 0x00460015 jmp 0x4606d0 | void (*0x4606d0)() (); 0x0046001a mov r15, qword [rsi] | r15 = *(rsi); 0x0046001d mov rdi, qword [rsi + 8] | rdi = *((rsi + 8)); 0x00460021 test rdi, rdi | | if (rdi == 0) { 0x00460024 jne 0x46003a | 0x00460026 mov rdi, qword [rip + 0x2a5bfb] | rdi = BloombergLP::bslma::Default::s_defaultAllocator; 0x0046002d test rdi, rdi | | if (rdi != 0) { 0x00460030 jne 0x46003a | goto label_3; | } 0x00460032 call 0x47ce20 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00460037 mov rdi, rax | rdi = rax; | } | label_3: 0x0046003a mov byte [r15 + 0x20], 0 | *((r15 + 0x20)) = 0; 0x0046003f mov qword [r15 + 0x28], rdi | *((r15 + 0x28)) = rdi; 0x00460043 cmp byte [rbx + 0x20], 0 | | if (*((rbx + 0x20)) == 0) { 0x00460047 je 0x460403 | goto label_2; | } 0x0046004d test rdi, rdi | | if (rdi == 0) { 0x00460050 jne 0x460066 | 0x00460052 mov rdi, qword [rip + 0x2a5bcf] | rdi = BloombergLP::bslma::Default::s_defaultAllocator; 0x00460059 test rdi, rdi | | if (rdi != 0) { 0x0046005c jne 0x460066 | goto label_4; | } 0x0046005e call 0x47ce20 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00460063 mov rdi, rax | rdi = rax; | } | label_4: 0x00460066 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x00460069 movups xmmword [r15], xmm0 | __asm ("movups xmmword [r15], xmm0"); 0x0046006d mov qword [r15 + 0x10], 0 | *((r15 + 0x10)) = 0; 0x00460075 mov qword [r15 + 0x18], rdi | *((r15 + 0x18)) = rdi; 0x00460079 mov r14, qword [rbx + 8] | r14 = *((rbx + 8)); 0x0046007d sub r14, qword [rbx] | r14 -= *(rbx); | if (r14 == 0) { 0x00460080 je 0x4603fe | goto label_5; | } 0x00460086 mov rax, qword [rdi] | rax = *(rdi); 0x00460089 mov rsi, r14 | rsi = r14; 0x0046008c call qword [rax + 0x10] | uint64_t (*rax + 0x10)() (); 0x0046008f jmp 0x460106 | goto label_6; 0x00460091 mov r15, qword [rsi] | r15 = *(rsi); 0x00460094 mov rdi, qword [rsi + 8] | rdi = *((rsi + 8)); 0x00460098 test rdi, rdi | | if (rdi == 0) { 0x0046009b jne 0x4600b1 | 0x0046009d mov rdi, qword [rip + 0x2a5b84] | rdi = BloombergLP::bslma::Default::s_defaultAllocator; 0x004600a4 test rdi, rdi | | if (rdi != 0) { 0x004600a7 jne 0x4600b1 | goto label_7; | } 0x004600a9 call 0x47ce20 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x004600ae mov rdi, rax | rdi = rax; | } | label_7: 0x004600b1 mov byte [r15 + 0x20], 0 | *((r15 + 0x20)) = 0; 0x004600b6 mov qword [r15 + 0x28], rdi | *((r15 + 0x28)) = rdi; 0x004600ba cmp byte [rbx + 0x20], 0 | | if (*((rbx + 0x20)) == 0) { 0x004600be je 0x460403 | goto label_2; | } 0x004600c4 test rdi, rdi | | if (rdi == 0) { 0x004600c7 jne 0x4600dd | 0x004600c9 mov rdi, qword [rip + 0x2a5b58] | rdi = BloombergLP::bslma::Default::s_defaultAllocator; 0x004600d0 test rdi, rdi | | if (rdi != 0) { 0x004600d3 jne 0x4600dd | goto label_8; | } 0x004600d5 call 0x47ce20 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x004600da mov rdi, rax | rdi = rax; | } | label_8: 0x004600dd xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x004600e0 movups xmmword [r15], xmm0 | __asm ("movups xmmword [r15], xmm0"); 0x004600e4 mov qword [r15 + 0x10], 0 | *((r15 + 0x10)) = 0; 0x004600ec mov qword [r15 + 0x18], rdi | *((r15 + 0x18)) = rdi; 0x004600f0 mov r14, qword [rbx + 8] | r14 = *((rbx + 8)); 0x004600f4 sub r14, qword [rbx] | r14 -= *(rbx); | if (r14 == 0) { 0x004600f7 je 0x4603fe | goto label_5; | } 0x004600fd mov rax, qword [rdi] | rax = *(rdi); 0x00460100 mov rsi, r14 | rsi = r14; 0x00460103 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); | label_6: 0x00460106 sar r14, 3 | r14 >>= 3; 0x0046010a mov qword [r15 + 8], rax | *((r15 + 8)) = rax; 0x0046010e mov qword [r15], rax | *(r15) = rax; 0x00460111 mov qword [r15 + 0x10], r14 | *((r15 + 0x10)) = r14; 0x00460115 mov rsi, qword [rbx] | rsi = *(rbx); 0x00460118 mov rdx, qword [rbx + 8] | rdx = *((rbx + 8)); 0x0046011c sub rdx, rsi | rdx -= rsi; | if (rdx == 0) { 0x0046011f je 0x46040d | goto label_9; | } 0x00460125 mov rdi, rax | 0x00460128 call 0x404c70 | memcpy (rax, rsi, rdx); 0x0046012d mov rcx, qword [rbx + 8] | rcx = *((rbx + 8)); 0x00460131 mov rax, qword [r15 + 8] | rax = *((r15 + 8)); 0x00460135 sub rcx, qword [rbx] | rcx -= *(rbx); 0x00460138 sar rcx, 3 | rcx >>= 3; | do { 0x0046013c lea rax, [rax + rcx*8] | rax = rax + rcx*8; 0x00460140 jmp 0x4603fa | goto label_10; 0x00460145 mov r14, qword [rsi] | r14 = *(rsi); 0x00460148 mov rax, qword [rsi + 8] | rax = *((rsi + 8)); 0x0046014c test rax, rax | | if (rax == 0) { 0x0046014f jne 0x460162 | 0x00460151 mov rax, qword [rip + 0x2a5ad0] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x00460158 test rax, rax | | if (rax != 0) { 0x0046015b jne 0x460162 | goto label_11; | } 0x0046015d call 0x47ce20 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } | label_11: 0x00460162 mov byte [r14 + 0x30], 0 | *((r14 + 0x30)) = 0; 0x00460167 mov qword [r14 + 0x38], rax | *((r14 + 0x38)) = rax; 0x0046016b cmp byte [rbx + 0x30], 0 | | if (*((rbx + 0x30)) != 0) { 0x0046016f je 0x460403 | 0x00460175 test rax, rax | | if (rax == 0) { 0x00460178 jne 0x46018b | 0x0046017a mov rax, qword [rip + 0x2a5aa7] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x00460181 test rax, rax | | if (rax != 0) { 0x00460184 jne 0x46018b | goto label_12; | } 0x00460186 call 0x47ce20 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } | label_12: 0x0046018b mov rcx, qword [rbx + 0x20] | rcx = *((rbx + 0x20)); 0x0046018f mov qword [r14 + 0x20], rcx | *((r14 + 0x20)) = rcx; 0x00460193 movups xmm0, xmmword [rbx] | __asm ("movups xmm0, xmmword [rbx]"); 0x00460196 movups xmm1, xmmword [rbx + 0x10] | __asm ("movups xmm1, xmmword [rbx + 0x10]"); 0x0046019a movups xmmword [r14 + 0x10], xmm1 | __asm ("movups xmmword [r14 + 0x10], xmm1"); 0x0046019f movups xmmword [r14], xmm0 | __asm ("movups xmmword [r14], xmm0"); 0x004601a3 mov qword [r14 + 0x28], rax | *((r14 + 0x28)) = rax; 0x004601a7 cmp rcx, 0x17 | | if (rcx != 0x17) { 0x004601ab je 0x46020a | 0x004601ad mov rcx, qword [rbx + 0x18] | rcx = *((rbx + 0x18)); 0x004601b1 cmp rcx, 0x17 | 0x004601b5 mov esi, 0x17 | esi = 0x17; | if (rcx > 0x17) { 0x004601ba cmova rsi, rcx | rsi = rcx; | } 0x004601be mov qword [r14], 0 | *(r14) = 0; 0x004601c5 mov qword [r14 + 0x18], rcx | *((r14 + 0x18)) = rcx; 0x004601c9 mov qword [r14 + 0x20], rsi | *((r14 + 0x20)) = rsi; 0x004601cd cmp rcx, 0x18 | | if (rcx >= 0x18) { 0x004601d1 jb 0x4601e9 | 0x004601d3 inc rsi | rsi++; 0x004601d6 mov rcx, qword [rax] | rcx = *(rax); 0x004601d9 mov rdi, rax | rdi = rax; 0x004601dc call qword [rcx + 0x10] | rax = uint64_t (*rcx + 0x10)() (); 0x004601df mov qword [r14], rax | *(r14) = rax; 0x004601e2 cmp qword [r14 + 0x20], 0x17 | | if (*((r14 + 0x20)) != 0x17) { 0x004601e7 jne 0x4601ec | goto label_13; | } | } 0x004601e9 mov rax, r14 | rax = r14; | label_13: 0x004601ec mov rdx, qword [r14 + 0x18] | rdx = *((r14 + 0x18)); 0x004601f0 inc rdx | rdx++; | if (rdx == 0) { 0x004601f3 je 0x46020a | goto label_14; | } 0x004601f5 cmp qword [rbx + 0x20], 0x17 | | if (*((rbx + 0x20)) != 0x17) { 0x004601fa je 0x4601ff | 0x004601fc mov rbx, qword [rbx] | rbx = *(rbx); | } 0x004601ff mov rdi, rax | 0x00460202 mov rsi, rbx | 0x00460205 call 0x404c70 | memcpy (rax, rbx, rdx); | } | label_14: 0x0046020a mov byte [r14 + 0x30], 1 | *((r14 + 0x30)) = 1; 0x0046020f jmp 0x460403 | goto label_2; 0x00460214 mov r14, qword [rsi] | r14 = *(rsi); 0x00460217 mov byte [r14], 0 | *(r14) = 0; 0x0046021b mov byte [r14 + 8], 0 | *((r14 + 8)) = 0; 0x00460220 cmp byte [rbx + 8], 0 | | if (*((rbx + 8)) == 0) { 0x00460224 je 0x460403 | goto label_2; | } 0x0046022a mov rax, qword [rbx] | rax = *(rbx); 0x0046022d mov qword [r14], rax | *(r14) = rax; 0x00460230 test rax, rax | | if (rax >= 0) { 0x00460233 js 0x460308 | 0x00460239 mov edi, 0x7054ec | 0x0046023e call 0x47f640 | eax = BloombergLP::bsls::Review::updateCount(BloombergLP::bsls::Atomic_TypeTraits::Int*) (method.BloombergLP::bdlt::Datetime.validateAndTraceLogRepresentation___const::lambda__1::operator_____const::count); 0x00460243 mov qword [rsp + 8], 0x4ae3f8 | *((rsp + 8)) = "detected invalid 'bdlt::Datetime'; see TEAM 579660115"; 0x0046024c mov qword [rsp + 0x10], 0x4ae42e | *((rsp + 0x10)) = "/home/parsa/experiments/assumptions/crush/ccm-none/groups/bdl/bdlt/bdlt_datetime.h"; 0x00460255 mov dword [rsp + 0x18], 0x466 | *((rsp + 0x18)) = 0x466; 0x0046025d mov qword [rsp + 0x20], 0x4cdd92 | *((rsp + 0x20)) = "R-INV"; 0x00460266 mov dword [rsp + 0x28], eax | *((rsp + 0x28)) = eax; 0x0046026a lea rdi, [rsp + 8] | rdi = rsp + 8; 0x0046026f call 0x47f660 | BloombergLP::bsls::Review::invokeHandler(BloombergLP::bsls::ReviewViolationconst&) (); 0x00460274 mov rax, qword [r14] | rax = *(r14); 0x00460277 mov rcx, rax | rcx = *(r14); 0x0046027a shr rcx, 0x20 | rcx >>= 0x20; 0x0046027e shl rax, 0x25 | rax <<= 0x25; 0x00460282 movabs rdx, 0x7fffffe000000000 | rdx = 0x7fffffe000000000; 0x0046028c add rdx, rax | rdx += rax; 0x0046028f imul rcx, rcx, 0x3e8 | rcx *= 0x3e8; 0x00460296 movabs rax, 0x8000000000000000 | rax = 0x8000000000000000; 0x004602a0 or rax, rdx | rax |= rdx; 0x004602a3 or rax, rcx | rax |= rcx; 0x004602a6 jmp 0x460308 | goto label_15; 0x004602a8 mov rax, qword [rsi] | rax = *(rsi); 0x004602ab mov byte [rax], 0 | *(rax) = 0; 0x004602ae mov byte [rax + 4], 0 | *((rax + 4)) = 0; 0x004602b2 cmp byte [rbx + 4], 0 | | if (*((rbx + 4)) == 0) { 0x004602b6 je 0x460403 | goto label_2; | } 0x004602bc mov ecx, dword [rbx] | ecx = *(rbx); 0x004602be mov dword [rax], ecx | *(rax) = ecx; 0x004602c0 mov byte [rax + 4], 1 | *((rax + 4)) = 1; 0x004602c4 jmp 0x460403 | goto label_2; 0x004602c9 mov r14, qword [rsi] | r14 = *(rsi); 0x004602cc mov byte [r14], 0 | *(r14) = 0; 0x004602d0 mov byte [r14 + 8], 0 | *((r14 + 8)) = 0; 0x004602d5 cmp byte [rbx + 8], 0 | | if (*((rbx + 8)) == 0) { 0x004602d9 je 0x460403 | goto label_2; | } 0x004602df movabs r15, 0x4000000000 | r15 = 0x4000000000; 0x004602e9 mov rax, qword [rbx] | rax = *(rbx); 0x004602ec mov qword [r14], rax | *(r14) = rax; 0x004602ef cmp rax, r15 | | if (rax < r15) { 0x004602f2 jl 0x460414 | goto label_16; | } 0x004602f8 movabs rcx, 0xffffffbfffffffff | rcx = 0xffffffbfffffffff; 0x00460302 and rax, rcx | rax &= rcx; | label_0: 0x00460305 or rax, r15 | rax |= r15; | } | label_15: 0x00460308 mov qword [r14], rax | *(r14) = rax; 0x0046030b mov byte [r14 + 8], 1 | *((r14 + 8)) = 1; 0x00460310 jmp 0x460403 | goto label_2; 0x00460315 mov rdi, rsi | rdi = rsi; 0x00460318 mov rsi, rbx | rsi = rbx; 0x0046031b add rsp, 0x30 | 0x0046031f pop rbx | 0x00460320 pop r14 | 0x00460322 pop r15 | 0x00460324 jmp 0x4604f0 | void (*0x4604f0)() (); 0x00460329 mov rdi, rsi | rdi = rsi; 0x0046032c mov rsi, rbx | rsi = rbx; 0x0046032f add rsp, 0x30 | 0x00460333 pop rbx | 0x00460334 pop r14 | 0x00460336 pop r15 | 0x00460338 jmp 0x460590 | void (*0x460590)() (); 0x0046033d mov rdi, qword [rsi] | rdi = *(rsi); 0x00460340 mov rsi, qword [rsi + 8] | rsi = *((rsi + 8)); 0x00460344 xor edx, edx | edx = 0; 0x00460346 mov rcx, rbx | rcx = rbx; 0x00460349 add rsp, 0x30 | 0x0046034d pop rbx | 0x0046034e pop r14 | 0x00460350 pop r15 | 0x00460352 jmp 0x460770 | void (*0x460770)() (); 0x00460357 mov r15, qword [rsi] | r15 = *(rsi); 0x0046035a mov rdi, qword [rsi + 8] | rdi = *((rsi + 8)); 0x0046035e test rdi, rdi | | if (rdi == 0) { 0x00460361 jne 0x460377 | 0x00460363 mov rdi, qword [rip + 0x2a58be] | rdi = BloombergLP::bslma::Default::s_defaultAllocator; 0x0046036a test rdi, rdi | | if (rdi != 0) { 0x0046036d jne 0x460377 | goto label_17; | } 0x0046036f call 0x47ce20 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00460374 mov rdi, rax | rdi = rax; | } | label_17: 0x00460377 mov byte [r15 + 0x20], 0 | *((r15 + 0x20)) = 0; 0x0046037c mov qword [r15 + 0x28], rdi | *((r15 + 0x28)) = rdi; 0x00460380 cmp byte [rbx + 0x20], 0 | | if (*((rbx + 0x20)) == 0) { 0x00460384 je 0x460403 | goto label_2; | } 0x00460386 test rdi, rdi | | if (rdi == 0) { 0x00460389 jne 0x46039f | 0x0046038b mov rdi, qword [rip + 0x2a5896] | rdi = BloombergLP::bslma::Default::s_defaultAllocator; 0x00460392 test rdi, rdi | | if (rdi != 0) { 0x00460395 jne 0x46039f | goto label_18; | } 0x00460397 call 0x47ce20 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x0046039c mov rdi, rax | rdi = rax; | } | label_18: 0x0046039f xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x004603a2 movups xmmword [r15], xmm0 | __asm ("movups xmmword [r15], xmm0"); 0x004603a6 mov qword [r15 + 0x10], 0 | *((r15 + 0x10)) = 0; 0x004603ae mov qword [r15 + 0x18], rdi | *((r15 + 0x18)) = rdi; 0x004603b2 mov r14, qword [rbx + 8] | r14 = *((rbx + 8)); 0x004603b6 sub r14, qword [rbx] | r14 -= *(rbx); | if (r14 != 0) { 0x004603b9 je 0x4603fe | 0x004603bb mov rax, qword [rdi] | rax = *(rdi); 0x004603be mov rsi, r14 | rsi = r14; 0x004603c1 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x004603c4 sar r14, 2 | r14 >>= 2; 0x004603c8 mov qword [r15 + 8], rax | *((r15 + 8)) = rax; 0x004603cc mov qword [r15], rax | *(r15) = rax; 0x004603cf mov qword [r15 + 0x10], r14 | *((r15 + 0x10)) = r14; 0x004603d3 mov rsi, qword [rbx] | rsi = *(rbx); 0x004603d6 mov rdx, qword [rbx + 8] | rdx = *((rbx + 8)); 0x004603da sub rdx, rsi | rdx -= rsi; | if (rdx == 0) { 0x004603dd je 0x460421 | goto label_19; | } 0x004603df mov rdi, rax | 0x004603e2 call 0x404c70 | memcpy (rax, rsi, rdx); 0x004603e7 mov rcx, qword [rbx + 8] | rcx = *((rbx + 8)); 0x004603eb mov rax, qword [r15 + 8] | rax = *((r15 + 8)); 0x004603ef sub rcx, qword [rbx] | rcx -= *(rbx); 0x004603f2 sar rcx, 2 | rcx >>= 2; | label_1: 0x004603f6 lea rax, [rax + rcx*4] | rax = rax + rcx*4; | label_10: 0x004603fa mov qword [r15 + 8], rax | *((r15 + 8)) = rax; | } | label_5: 0x004603fe mov byte [r15 + 0x20], 1 | *((r15 + 0x20)) = 1; | } | label_2: 0x00460403 add rsp, 0x30 | 0x00460407 pop rbx | 0x00460408 pop r14 | 0x0046040a pop r15 | 0x0046040c ret | return rax; | label_9: 0x0046040d xor ecx, ecx | ecx = 0; 0x0046040f jmp 0x46013c | | } while (1); | label_16: 0x00460414 mov rdi, r14 | 0x00460417 call 0x478ca0 | BloombergLP::bdlt::Time::invalidMicrosecondsFromMidnight()const (r14); 0x0046041c jmp 0x460305 | goto label_0; | label_19: 0x00460421 xor ecx, ecx | ecx = 0; 0x00460423 jmp 0x4603f6 | goto label_1; | }