; assembly | /* r2dec pseudo code output */ | /* bdld_datum.t/assume @ 0x45c2a0 */ | #include | ; (fcn) method.void_BloombergLP::bdld::Datum.apply_Benchmark_Visitor__Benchmark_Visitor__const () | int64_t method_void_BloombergLP::bdld::Datum_apply_Benchmark_Visitor_Benchmark_Visitor_const (char * arg_8h, char * arg_10h, int64_t arg_18h, char * arg_20h, int64_t arg_28h, int64_t arg2, uint32_t arg1) { | rsi = arg2; | rdi = arg1; | /* void BloombergLP::bdld::Datum::apply(Benchmark_Visitor&) const */ 0x0045c2a0 push r15 | 0x0045c2a2 push r14 | 0x0045c2a4 push rbx | 0x0045c2a5 sub rsp, 0x30 | 0x0045c2a9 movsx eax, word [rdi + 0xe] | eax = *((rdi + 0xe)); 0x0045c2ad lea ecx, [rax - 1] | ecx = rax - 1; 0x0045c2b0 cmp ecx, 0x15 | | if (ecx > 0x15) { 0x0045c2b3 ja 0x45c466 | goto label_3; | } 0x0045c2b9 mov rbx, rsi | rbx = rsi; | /* switch table (22 cases) at 0x4c5b08 */ 0x0045c2bc jmp qword [rcx*8 + 0x4c5b08] | 0x0045c2c3 cmp ax, 0x13 | | if (ax == 0x13) { 0x0045c2c7 jne 0x45c455 | 0x0045c2cd mov eax, dword [rdi] | eax = *(rdi); 0x0045c2cf jmp 0x45c45a | goto label_4; 0x0045c2d4 movsxd rax, dword [rdi + 8] | rax = *((rdi + 8)); 0x0045c2d8 jmp 0x45c30b | goto label_5; 0x0045c2da cmp ax, 0x15 | 0x0045c2de jmp 0x45c466 | goto label_3; 0x0045c2e3 movsd xmm0, qword [rbx] | xmm0 = *(rbx); 0x0045c2e7 addsd xmm0, qword [rip + 0x68e89] | __asm ("addsd xmm0, qword [0x004c5178]"); 0x0045c2ef jmp 0x45c462 | goto label_6; 0x0045c2f4 cmp dword [rdi + 8], 0 | | if (*((rdi + 8)) != 0) { 0x0045c2f8 jne 0x45c470 | goto label_7; | } 0x0045c2fe xorpd xmm0, xmm0 | __asm ("xorpd xmm0, xmm0"); 0x0045c302 jmp 0x45c45e | goto label_8; 0x0045c307 movsx rax, byte [rdi] | rax = *(rdi); | label_5: 0x0045c30b movq xmm0, rax | xmm0 = rax; 0x0045c310 punpckldq xmm0, xmmword [rip + 0x68b18] | __asm ("punpckldq xmm0, xmmword [0x004c4e30]"); 0x0045c318 subpd xmm0, xmmword [rip + 0x68b20] | __asm ("subpd xmm0, xmmword [0x004c4e40]"); 0x0045c320 movapd xmm1, xmm0 | __asm ("movapd xmm1, xmm0"); 0x0045c324 unpckhpd xmm1, xmm0 | __asm ("unpckhpd xmm1, xmm0"); 0x0045c328 addsd xmm1, xmm0 | __asm ("addsd xmm1, xmm0"); 0x0045c32c addsd xmm1, qword [rbx] | __asm ("addsd xmm1, qword [rbx]"); 0x0045c330 movsd qword [rbx], xmm1 | *(rbx) = xmm1; 0x0045c334 jmp 0x45c466 | goto label_3; 0x0045c339 mov edi, dword [rdi] | 0x0045c33b call 0x46f430 | BloombergLP::bdlt::PosixDateImpUtil::serialToDay(int) (*(rdi), rsi); 0x0045c340 jmp 0x45c45a | goto label_4; 0x0045c345 movabs r14, 0xffffffbfffffffff | r14 = 0xffffffbfffffffff; 0x0045c34f movabs r15, 0x4000000000 | r15 = 0x4000000000; 0x0045c359 mov rax, qword [rdi] | rax = *(rdi); 0x0045c35c mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x0045c361 cmp rax, r15 | | if (rax < r15) { 0x0045c364 jl 0x45c47a | goto label_9; | } 0x0045c36a and rax, r14 | rax &= r14; | label_0: 0x0045c36d mov rcx, rax | rcx = rax; 0x0045c370 or rcx, r15 | rcx |= r15; 0x0045c373 mov qword [rsp + 8], rcx | *((rsp + 8)) = rcx; 0x0045c378 cmp rcx, r15 | | if (rcx < r15) { 0x0045c37b jl 0x45c489 | goto label_10; | } 0x0045c381 and rax, r14 | rax &= r14; | label_1: 0x0045c384 movabs rcx, 0x431bde82d7b634db | rcx = 0x431bde82d7b634db; 0x0045c38e imul rcx | rdx:rax = rax * rcx; 0x0045c391 jmp 0x45c405 | goto label_11; 0x0045c393 mov r14, qword [rdi] | r14 = *(rdi); 0x0045c396 test r14, r14 | | if (r14 >= 0) { 0x0045c399 jns 0x45c498 | goto label_12; | } | label_2: 0x0045c39f movabs rax, 0x1fffffffc0 | rax = 0x1fffffffc0; 0x0045c3a9 and rax, r14 | rax &= r14; 0x0045c3ac movabs rcx, 0x431bde82d7b634db | rcx = 0x431bde82d7b634db; 0x0045c3b6 mul rcx | rdx:rax = rax * rcx; 0x0045c3b9 shr rdx, 0x12 | rdx >>= 0x12; 0x0045c3bd mov eax, 0x88888889 | eax = 0x88888889; 0x0045c3c2 imul rax, rdx | rax *= rdx; 0x0045c3c6 shr rax, 0x25 | rax >>= 0x25; 0x0045c3ca imul eax, eax, 0x3c | eax *= 0x3c; 0x0045c3cd sub edx, eax | edx -= eax; 0x0045c3cf cvtsi2sd xmm0, edx | __asm ("cvtsi2sd xmm0, edx"); 0x0045c3d3 jmp 0x45c45e | goto label_8; 0x0045c3d8 mov esi, dword [rdi + 8] | 0x0045c3db mov rax, qword [rdi] | rax = *(rdi); 0x0045c3de mov qword [rsp], rax | *(rsp) = rax; 0x0045c3e2 lea rdi, [rsp + 8] | 0x0045c3e7 xor edx, edx | 0x0045c3e9 xor ecx, ecx | 0x0045c3eb xor r8d, r8d | 0x0045c3ee xor r9d, r9d | 0x0045c3f1 call 0x46e260 | BloombergLP::bdlt::DatetimeInterval::setInterval(int,long long,long long,long long,long long,long long) (rsp + 8, *((rdi + 8)), 0, 0, 0, 0); 0x0045c3f6 movabs rax, 0x431bde82d7b634db | rax = 0x431bde82d7b634db; 0x0045c400 imul qword [rsp + 0x10] | rdx:rax = rax * *((rsp + 0x10)); | label_11: 0x0045c405 mov rcx, rdx | rcx = rdx; 0x0045c408 mov rax, rdx | rax = rdx; 0x0045c40b shr rax, 0x3f | rax >>= 0x3f; 0x0045c40f sar rcx, 0x12 | rcx >>= 0x12; 0x0045c413 add rcx, rax | rcx += rax; 0x0045c416 movabs rdx, 0x8888888888888889 | rdx = 0x8888888888888889; 0x0045c420 mov rax, rcx | rax = rcx; 0x0045c423 imul rdx | rdx:rax = rax * rdx; 0x0045c426 add rdx, rcx | rdx += rcx; 0x0045c429 mov rax, rdx | rax = rdx; 0x0045c42c shr rax, 0x3f | rax >>= 0x3f; 0x0045c430 shr rdx, 5 | rdx >>= 5; 0x0045c434 add edx, eax | edx += eax; 0x0045c436 imul eax, edx, 0x3c | eax = edx * 0x3c; 0x0045c439 sub ecx, eax | ecx -= eax; 0x0045c43b cvtsi2sd xmm0, ecx | __asm ("cvtsi2sd xmm0, ecx"); 0x0045c43f jmp 0x45c45e | goto label_8; 0x0045c441 cvtsi2sd xmm0, dword [rdi + 8] | __asm ("cvtsi2sd xmm0, dword [rdi + 8]"); 0x0045c446 jmp 0x45c45e | goto label_8; 0x0045c448 cvtsi2sd xmm0, qword [rdi] | __asm ("cvtsi2sd xmm0, qword [rdi]"); 0x0045c44d jmp 0x45c45e | goto label_8; 0x0045c44f movsd xmm0, qword [rdi] | xmm0 = *(rdi); 0x0045c453 jmp 0x45c45e | | } else { 0x0045c455 mov rax, qword [rdi] | rax = *(rdi); 0x0045c458 mov eax, dword [rax] | eax = *(rax); | label_4: 0x0045c45a cvtsi2sd xmm0, eax | __asm ("cvtsi2sd xmm0, eax"); | } | do { | label_8: 0x0045c45e addsd xmm0, qword [rbx] | __asm ("addsd xmm0, qword [rbx]"); | label_6: 0x0045c462 movsd qword [rbx], xmm0 | *(rbx) = xmm0; | label_3: 0x0045c466 add rsp, 0x30 | 0x0045c46a pop rbx | 0x0045c46b pop r14 | 0x0045c46d pop r15 | 0x0045c46f ret | return rax; | label_7: 0x0045c470 movsd xmm0, qword [rip + 0x68cf8] | xmm0 = *(0x004c5170); 0x0045c478 jmp 0x45c45e | | } while (1); | label_9: 0x0045c47a lea rdi, [rsp + 8] | 0x0045c47f call 0x46f830 | BloombergLP::bdlt::Time::invalidMicrosecondsFromMidnight()const (rsp + 8); 0x0045c484 jmp 0x45c36d | goto label_0; | label_10: 0x0045c489 lea rdi, [rsp + 8] | 0x0045c48e call 0x46f830 | BloombergLP::bdlt::Time::invalidMicrosecondsFromMidnight()const (rsp + 8); 0x0045c493 jmp 0x45c384 | goto label_1; | label_12: 0x0045c498 mov edi, 0x8ee75c | 0x0045c49d call 0x476a00 | eax = BloombergLP::bsls::Review::updateCount(BloombergLP::bsls::Atomic_TypeTraits::Int*) (method.BloombergLP::bdlt::Datetime.validateAndTraceLogRepresentation___const::lambda__1::operator_____const::count); 0x0045c4a2 mov qword [rsp + 8], 0x4cc232 | *((rsp + 8)) = "detected invalid 'bdlt::Datetime'; see TEAM 579660115"; 0x0045c4ab mov qword [rsp + 0x10], 0x4cc268 | *((rsp + 0x10)) = "/home/parsa/experiments/assumptions/crush/ccm-assume/groups/bdl/bdlt/bdlt_datetime.h"; 0x0045c4b4 mov dword [rsp + 0x18], 0x466 | *((rsp + 0x18)) = 0x466; 0x0045c4bc mov qword [rsp + 0x20], 0x4e5192 | *((rsp + 0x20)) = "R-INV"; 0x0045c4c5 mov dword [rsp + 0x28], eax | *((rsp + 0x28)) = eax; 0x0045c4c9 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x0045c4ce call 0x476a20 | rax = BloombergLP::bsls::Review::invokeHandler(BloombergLP::bsls::ReviewViolationconst&) (); 0x0045c4d3 shr r14, 0x20 | r14 >>= 0x20; 0x0045c4d7 imul rax, r14, 0x3e8 | rax = r14 * 0x3e8; 0x0045c4de movabs r14, 0xffffffe000000000 | r14 = 0xffffffe000000000; 0x0045c4e8 or r14, rax | r14 |= rax; 0x0045c4eb jmp 0x45c39f | goto label_2; | }