; assembly | /* r2dec pseudo code output */ | /* balcl_typeinfo.t/none @ 0x412f50 */ | #include | ; (fcn) sym._anonymous_namespace_::u::areEqualValues_BloombergLP::balcl::OptionValue_const__void_const_ () | uint64_t anonymous_namespace_::u::areEqualValues_BloombergLP::balcl::OptionValue_const_void_const_ (int64_t arg2, int64_t arg1) { | char * var_8h; | int64_t var_10h; | char * var_18h; | int64_t var_20h; | rsi = arg2; | rdi = arg1; | /* (anonymous namespace)::u::areEqualValues(BloombergLP::balcl::OptionValue const&, void const*) */ 0x00412f50 push rbp | 0x00412f51 push r15 | 0x00412f53 push r14 | 0x00412f55 push r13 | 0x00412f57 push r12 | 0x00412f59 push rbx | 0x00412f5a sub rsp, 0x28 | 0x00412f5e mov r14, rsi | r14 = rsi; 0x00412f61 mov rbx, rdi | rbx = rdi; 0x00412f64 call 0x4165b0 | eax = BloombergLP::balcl::OptionValue::type()const (rdi); 0x00412f69 add eax, 0xfffffffe | eax += 0xfffffffe; 0x00412f6c cmp eax, 0xf | | if (eax > 0xf) { 0x00412f6f ja 0x4131f2 | goto label_7; | } | /* switch table (16 cases) at 0x454a30 */ 0x00412f75 jmp qword [rax*8 + 0x454a30] | 0x00412f7c mov rdi, qword [rbx] | rdi = *(rbx); 0x00412f7f mov rax, qword [rbx + 8] | rax = *((rbx + 8)); 0x00412f83 mov rdx, rax | rdx = *((rbx + 8)); 0x00412f86 sub rdx, rdi | rdx -= rdi; 0x00412f89 mov rsi, qword [r14] | rsi = *(r14); 0x00412f8c mov rcx, qword [r14 + 8] | rcx = *((r14 + 8)); 0x00412f90 sub rcx, rsi | rcx -= rsi; 0x00412f93 cmp rdx, rcx | | if (rdx != rcx) { 0x00412f96 jne 0x4131f2 | goto label_7; | } 0x00412f9c cmp rdi, rax | | if (rdi == rax) { 0x00412f9f je 0x4131f7 | goto label_8; | } | do { 0x00412fa5 call 0x403fd0 | eax = bcmp (); 0x00412faa test eax, eax | 0x00412fac jmp 0x41306d | goto label_9; 0x00412fb1 mov eax, dword [rbx] | eax = *(rbx); 0x00412fb3 cmp eax, dword [r14] | 0x00412fb6 jmp 0x41306d | goto label_9; 0x00412fbb mov al, byte [rbx] | al = *(rbx); 0x00412fbd cmp al, byte [r14] | 0x00412fc0 jmp 0x41306d | goto label_9; 0x00412fc5 mov rax, qword [rbx] | rax = *(rbx); 0x00412fc8 cmp rax, qword [r14] | 0x00412fcb jmp 0x41306d | goto label_9; 0x00412fd0 movsd xmm0, qword [r14] | xmm0 = *(r14); 0x00412fd5 cmpeqsd xmm0, qword [rbx] | __asm ("cmpeqsd xmm0, qword [rbx]"); 0x00412fda movq r14, xmm0 | r14 = xmm0; 0x00412fdf and r14d, 1 | r14d &= 1; 0x00412fe3 jmp 0x4131fa | goto label_10; 0x00412fe8 mov rdx, qword [rbx + 0x18] | rdx = *((rbx + 0x18)); 0x00412fec cmp rdx, qword [r14 + 0x18] | | if (rdx != *((r14 + 0x18))) { 0x00412ff0 jne 0x4131f2 | goto label_7; | } 0x00412ff6 test rdx, rdx | | if (rdx == 0) { 0x00412ff9 je 0x4131f7 | goto label_8; | } 0x00412fff cmp qword [r14 + 0x20], 0x17 | | if (*((r14 + 0x20)) != 0x17) { 0x00413004 je 0x413009 | 0x00413006 mov r14, qword [r14] | r14 = *(r14); | } 0x00413009 cmp qword [rbx + 0x20], 0x17 | | if (*((rbx + 0x20)) != 0x17) { 0x0041300e je 0x413013 | 0x00413010 mov rbx, qword [rbx] | rbx = *(rbx); | } 0x00413013 mov rdi, rbx | rdi = *(rbx); 0x00413016 mov rsi, r14 | rsi = r14; 0x00413019 jmp 0x412fa5 | | } while (1); 0x0041301b mov rbp, qword [rbx] | rbp = *(rbx); 0x0041301e test rbp, rbp | | if (rbp >= 0) { 0x00413021 jns 0x413229 | goto label_11; | } | label_5: 0x00413027 mov rax, qword [r14] | rax = *(r14); 0x0041302a test rax, rax | | if (rax >= 0) { 0x0041302d jns 0x413298 | goto label_12; | } | label_6: 0x00413033 cmp rbp, rax | 0x00413036 jmp 0x41306d | goto label_9; 0x00413038 movabs r12, 0xffffffbfffffffff | r12 = 0xffffffbfffffffff; 0x00413042 movabs rbp, 0x4000000000 | 0x0041304c mov r15, qword [rbx] | r15 = *(rbx); 0x0041304f cmp r15, rbp | | if (r15 < rbp) { 0x00413052 jl 0x41320c | goto label_13; | } 0x00413058 and r15, r12 | r15 &= r12; | label_3: 0x0041305b mov rax, qword [r14] | rax = *(r14); 0x0041305e cmp rax, rbp | | if (rax < rbp) { 0x00413061 jl 0x41321c | goto label_14; | } 0x00413067 and rax, r12 | rax &= r12; | label_4: 0x0041306a cmp r15, rax | | label_9: 0x0041306d sete r14b | r14b = (r15 == rax) ? 1 : 0; 0x00413071 jmp 0x4131fa | goto label_10; 0x00413076 mov r15, qword [rbx] | r15 = *(rbx); 0x00413079 mov rbx, qword [rbx + 8] | rbx = *((rbx + 8)); 0x0041307d mov rax, rbx | rax = *((rbx + 8)); 0x00413080 sub rax, r15 | rax -= r15; 0x00413083 mov rbp, qword [r14] | rbp = *(r14); 0x00413086 mov rcx, qword [r14 + 8] | rcx = *((r14 + 8)); 0x0041308a sub rcx, rbp | rcx -= rbp; 0x0041308d cmp rax, rcx | | if (rax != rcx) { 0x00413090 jne 0x4131f2 | goto label_7; | } 0x00413096 mov r14b, 1 | r14b = 1; 0x00413099 cmp r15, rbx | | if (r15 != rbx) { 0x0041309c jne 0x4130c1 | goto label_15; | } 0x0041309e jmp 0x4131fa | goto label_10; | label_0: 0x004130a3 call 0x403fd0 | eax = bcmp (); 0x004130a8 test eax, eax | | if (eax != 0) { 0x004130aa jne 0x4131f2 | goto label_7; | } | do { 0x004130b0 add r15, 0x30 | r15 += 0x30; 0x004130b4 add rbp, 0x30 | rbp += 0x30; 0x004130b8 cmp rbx, r15 | | if (rbx == r15) { 0x004130bb je 0x4131fa | goto label_10; | } | label_15: 0x004130c1 mov rdx, qword [r15 + 0x18] | rdx = *((r15 + 0x18)); 0x004130c5 cmp rdx, qword [rbp + 0x18] | | if (rdx != *((rbp + 0x18))) { 0x004130c9 jne 0x4131f2 | goto label_7; | } 0x004130cf test rdx, rdx | 0x004130d2 je 0x4130b0 | | } while (rdx == 0); 0x004130d4 cmp qword [rbp + 0x20], 0x17 | 0x004130d9 mov rsi, rbp | rsi = rbp; | if (*((rbp + 0x20)) != 0x17) { 0x004130dc je 0x4130e2 | 0x004130de mov rsi, qword [rbp] | rsi = *(rbp); | } 0x004130e2 cmp qword [r15 + 0x20], 0x17 | 0x004130e7 mov rdi, r15 | rdi = r15; | if (*((r15 + 0x20)) == 0x17) { 0x004130ea je 0x4130a3 | goto label_0; | } 0x004130ec mov rdi, qword [r15] | rdi = *(r15); 0x004130ef jmp 0x4130a3 | goto label_0; 0x004130f1 mov rdi, rbx | rdi = rbx; 0x004130f4 mov rsi, r14 | rsi = r14; 0x004130f7 add rsp, 0x28 | 0x004130fb pop rbx | 0x004130fc pop r12 | 0x004130fe pop r13 | 0x00413100 pop r14 | 0x00413102 pop r15 | 0x00413104 pop rbp | 0x00413105 jmp 0x4149b0 | void (*0x4149b0)() (); 0x0041310a mov rax, qword [rbx] | rax = *(rbx); 0x0041310d mov rsi, qword [rbx + 8] | rsi = *((rbx + 8)); 0x00413111 mov rcx, rsi | rcx = *((rbx + 8)); 0x00413114 sub rcx, rax | rcx -= rax; 0x00413117 mov rdx, qword [r14] | rdx = *(r14); 0x0041311a mov rdi, qword [r14 + 8] | rdi = *((r14 + 8)); 0x0041311e sub rdi, rdx | rdi -= rdx; 0x00413121 cmp rcx, rdi | | if (rcx != rdi) { 0x00413124 jne 0x4131f2 | goto label_7; | } 0x0041312a cmp rax, rsi | | if (rax == rsi) { 0x0041312d je 0x4131f7 | goto label_8; | } 0x00413133 xor esi, esi | esi = 0; 0x00413135 nop word cs:[rax + rax] | 0x0041313f nop | | do { 0x00413140 mov edi, dword [rax + rsi] | edi = *((rax + rsi)); 0x00413143 cmp edi, dword [rdx + rsi] | 0x00413146 sete r14b | r14b = (edi == *((rdx + rsi))) ? 1 : 0; | if (edi != *((rdx + rsi))) { 0x0041314a jne 0x4131fa | goto label_10; | } 0x00413150 add rsi, 4 | rsi += 4; 0x00413154 cmp rcx, rsi | 0x00413157 jne 0x413140 | | } while (rcx != rsi); 0x00413159 jmp 0x4131fa | goto label_10; 0x0041315e mov r15, qword [rbx] | r15 = *(rbx); 0x00413161 mov r13, qword [rbx + 8] | r13 = *((rbx + 8)); 0x00413165 mov rax, r13 | rax = *((rbx + 8)); 0x00413168 sub rax, r15 | rax -= r15; 0x0041316b mov r12, qword [r14] | r12 = *(r14); 0x0041316e mov rcx, qword [r14 + 8] | rcx = *((r14 + 8)); 0x00413172 sub rcx, r12 | rcx -= r12; 0x00413175 cmp rax, rcx | | if (rax != rcx) { 0x00413178 jne 0x4131f2 | goto label_7; | } 0x0041317a cmp r15, r13 | | if (r15 == r13) { 0x0041317d je 0x4131f7 | goto label_8; | } 0x0041317f movabs rcx, 0xffffffbfffffffff | rcx = 0xffffffbfffffffff; 0x00413189 movabs rbp, 0x4000000000 | 0x00413193 nop word cs:[rax + rax] | 0x0041319d nop dword [rax] | | do { 0x004131a0 mov rbx, qword [r15] | rbx = *(r15); 0x004131a3 cmp rbx, rbp | | if (rbx < rbp) { 0x004131a6 jl 0x4131cf | goto label_16; | } 0x004131a8 and rbx, rcx | rbx &= rcx; | label_1: 0x004131ab mov rax, qword [r12] | rax = *(r12); 0x004131af cmp rax, rbp | | if (rax < rbp) { 0x004131b2 jl 0x4131e2 | goto label_17; | } 0x004131b4 and rax, rcx | rax &= rcx; | label_2: 0x004131b7 cmp rbx, rax | 0x004131ba sete r14b | r14b = (rbx == rax) ? 1 : 0; | if (rbx != rax) { 0x004131be jne 0x4131fa | goto label_10; | } 0x004131c0 add r15, 8 | r15 += 8; 0x004131c4 add r12, 8 | r12 += 8; 0x004131c8 cmp r13, r15 | 0x004131cb jne 0x4131a0 | | } while (r13 != r15); 0x004131cd jmp 0x4131fa | goto label_10; | label_16: 0x004131cf mov rdi, r15 | 0x004131d2 mov rbx, rcx | rbx = rcx; 0x004131d5 call 0x429d50 | rax = BloombergLP::bdlt::Time::invalidMicrosecondsFromMidnight()const (r15); 0x004131da mov rcx, rbx | rcx = rbx; 0x004131dd mov rbx, rax | rbx = rax; 0x004131e0 jmp 0x4131ab | goto label_1; | label_17: 0x004131e2 mov rdi, r12 | 0x004131e5 mov r14, rcx | r14 = rcx; 0x004131e8 call 0x429d50 | BloombergLP::bdlt::Time::invalidMicrosecondsFromMidnight()const (r12); 0x004131ed mov rcx, r14 | rcx = r14; 0x004131f0 jmp 0x4131b7 | goto label_2; | label_7: 0x004131f2 xor r14d, r14d | r14d = 0; 0x004131f5 jmp 0x4131fa | goto label_10; | label_8: 0x004131f7 mov r14b, 1 | r14b = 1; | label_10: 0x004131fa mov eax, r14d | eax = r14d; 0x004131fd add rsp, 0x28 | 0x00413201 pop rbx | 0x00413202 pop r12 | 0x00413204 pop r13 | 0x00413206 pop r14 | 0x00413208 pop r15 | 0x0041320a pop rbp | 0x0041320b ret | return rax; | label_13: 0x0041320c mov rdi, rbx | 0x0041320f call 0x429d50 | rax = BloombergLP::bdlt::Time::invalidMicrosecondsFromMidnight()const (rbx); 0x00413214 mov r15, rax | r15 = rax; 0x00413217 jmp 0x41305b | goto label_3; | label_14: 0x0041321c mov rdi, r14 | 0x0041321f call 0x429d50 | BloombergLP::bdlt::Time::invalidMicrosecondsFromMidnight()const (r14); 0x00413224 jmp 0x41306a | goto label_4; | label_11: 0x00413229 mov edi, 0x6965f8 | 0x0041322e call 0x42fa40 | eax = BloombergLP::bsls::Review::updateCount(BloombergLP::bsls::Atomic_TypeTraits::Int*) (method.BloombergLP::bdlt::Datetime.validateAndTraceLogRepresentation___const::lambda__1::operator_____const::count); 0x00413233 mov qword [rsp], 0x45692e | *(rsp) = "detected invalid 'bdlt::Datetime'; see TEAM 579660115"; 0x0041323b mov qword [rsp + 8], 0x456964 | *((rsp + 8)) = "/home/parsa/experiments/assumptions/crush/ccm-none/groups/bdl/bdlt/bdlt_datetime.h"; 0x00413244 mov dword [rsp + 0x10], 0x466 | *((rsp + 0x10)) = 0x466; 0x0041324c mov qword [rsp + 0x18], 0x47515a | *((rsp + 0x18)) = "R-INV"; 0x00413255 mov dword [rsp + 0x20], eax | *((rsp + 0x20)) = eax; 0x00413259 mov rdi, rsp | rdi = rsp; 0x0041325c call 0x42fa60 | BloombergLP::bsls::Review::invokeHandler(BloombergLP::bsls::ReviewViolationconst&) (); 0x00413261 mov rax, qword [rbx] | rax = *(rbx); 0x00413264 mov rcx, rax | rcx = *(rbx); 0x00413267 shr rcx, 0x20 | rcx >>= 0x20; 0x0041326b shl rax, 0x25 | rax <<= 0x25; 0x0041326f movabs rdx, 0x7fffffe000000000 | rdx = 0x7fffffe000000000; 0x00413279 add rdx, rax | rdx += rax; 0x0041327c imul rax, rcx, 0x3e8 | rax = rcx * 0x3e8; 0x00413283 movabs rbp, 0x8000000000000000 | 0x0041328d or rbp, rdx | rbp |= rdx; 0x00413290 or rbp, rax | rbp |= rax; 0x00413293 jmp 0x413027 | goto label_5; | label_12: 0x00413298 mov edi, 0x6965f8 | 0x0041329d call 0x42fa40 | eax = BloombergLP::bsls::Review::updateCount(BloombergLP::bsls::Atomic_TypeTraits::Int*) (method.BloombergLP::bdlt::Datetime.validateAndTraceLogRepresentation___const::lambda__1::operator_____const::count); 0x004132a2 mov qword [rsp], 0x45692e | *(rsp) = "detected invalid 'bdlt::Datetime'; see TEAM 579660115"; 0x004132aa mov qword [rsp + 8], 0x456964 | *((rsp + 8)) = "/home/parsa/experiments/assumptions/crush/ccm-none/groups/bdl/bdlt/bdlt_datetime.h"; 0x004132b3 mov dword [rsp + 0x10], 0x466 | *((rsp + 0x10)) = 0x466; 0x004132bb mov qword [rsp + 0x18], 0x47515a | *((rsp + 0x18)) = "R-INV"; 0x004132c4 mov dword [rsp + 0x20], eax | *((rsp + 0x20)) = eax; 0x004132c8 mov rdi, rsp | rdi = rsp; 0x004132cb call 0x42fa60 | BloombergLP::bsls::Review::invokeHandler(BloombergLP::bsls::ReviewViolationconst&) (); 0x004132d0 mov rax, qword [r14] | rax = *(r14); 0x004132d3 mov rcx, rax | rcx = *(r14); 0x004132d6 shr rcx, 0x20 | rcx >>= 0x20; 0x004132da shl rax, 0x25 | rax <<= 0x25; 0x004132de movabs rdx, 0x7fffffe000000000 | rdx = 0x7fffffe000000000; 0x004132e8 add rdx, rax | rdx += rax; 0x004132eb imul rcx, rcx, 0x3e8 | rcx *= 0x3e8; 0x004132f2 movabs rax, 0x8000000000000000 | rax = 0x8000000000000000; 0x004132fc or rax, rdx | rax |= rdx; 0x004132ff or rax, rcx | rax |= rcx; 0x00413302 jmp 0x413033 | goto label_6; | }