; assembly | /* r2dec pseudo code output */ | /* baljsn_datumutil.t/none @ 0x43e260 */ | #include | ; (fcn) sym._anonymous_namespace_::u::encodeValue_BloombergLP::baljsn::SimpleFormatter__BloombergLP::bdld::Datum_const__int__std::__1::basic_string_view_char__std::__1::char_traits_char____ () | int64_t anonymous_namespace_::u::encodeValue_BloombergLP::baljsn::SimpleFormatter_BloombergLP::bdld::Datum_const_int_std::_1::basic_string_view_char_std::_1::char_traits_char_ (int64_t arg_10h, char * arg_10h_2, char * arg_18h, int64_t arg_20h, char * arg_28h, int64_t arg_30h, int64_t arg4, int64_t arg3, int64_t arg2, int64_t arg1, char * arg7) { | rcx = arg4; | rdx = arg3; | rsi = arg2; | rdi = arg1; | xmm0 = arg7; | do { | /* (anonymous namespace)::u::encodeValue(BloombergLP::baljsn::SimpleFormatter*, BloombergLP::bdld::Datum const&, int*, std::__1::basic_string_view >*) */ | label_1: 0x0043e260 push rbp | 0x0043e261 push r15 | 0x0043e263 push r14 | 0x0043e265 push r13 | 0x0043e267 push r12 | 0x0043e269 push rbx | 0x0043e26a sub rsp, 0x38 | 0x0043e26e mov r14, rdx | r14 = rdx; 0x0043e271 mov r12, rsi | r12 = rsi; 0x0043e274 mov r15, rdi | r15 = rdi; 0x0043e277 movsx rax, word [rsi + 0xe] | rax = *((rsi + 0xe)); 0x0043e27c mov eax, eax | 0x0043e27e mov ebx, dword [rax*4 + 0x4d2310] | ebx = *((rax*4 + method.BloombergLP::bdld::Datum.type___const::convert)); 0x0043e285 test rcx, rcx | | if (rcx != 0) { 0x0043e288 je 0x43e295 | 0x0043e28a mov rdi, r15 | 0x0043e28d mov rsi, rcx | 0x0043e290 call 0x43ebf0 | BloombergLP::baljsn::SimpleFormatter::addMemberName(std::_1::basic_string_view>const&) (r15, rcx); | } 0x0043e295 cmp ebx, 0xf | | if (ebx <= 0xf) { 0x0043e298 ja 0x43e37b | 0x0043e29e mov eax, ebx | eax = ebx; | /* switch table (16 cases) at 0x4d2490 */ 0x0043e2a0 jmp qword [rax*8 + 0x4d2490] | 0x0043e2a7 mov rdi, r15 | 0x0043e2aa call 0x43f010 | BloombergLP::baljsn::SimpleFormatter::addNullValue() (r15); 0x0043e2af jmp 0x43e51b | goto label_5; 0x0043e2b4 mov eax, dword [r12 + 8] | eax = *((r12 + 8)); 0x0043e2b9 mov dword [rsp + 0x10], eax | *((rsp + 0x10)) = eax; 0x0043e2bd lea rsi, [rsp + 0x10] | 0x0043e2c2 mov rdi, r15 | 0x0043e2c5 call 0x43eca0 | intBloombergLP::baljsn::SimpleFormatter::addValue(intconst&) (r15, rsp + 0x10); 0x0043e2ca jmp 0x43e514 | goto label_6; 0x0043e2cf movsd xmm0, qword [r12] | xmm0 = *(r12); 0x0043e2d5 movsd qword [rsp + 0x10], xmm0 | *((rsp + 0x10)) = xmm0; 0x0043e2db lea rsi, [rsp + 0x10] | 0x0043e2e0 mov rdi, r15 | 0x0043e2e3 call 0x43ed70 | eax = intBloombergLP::baljsn::SimpleFormatter::addValue(doubleconst&) (r15, rsp + 0x10, rdx); 0x0043e2e8 mov r12d, 2 | r12d = 2; 0x0043e2ee test eax, eax | | if (eax != 0) { 0x0043e2f0 jne 0x43e51e | goto label_2; | } 0x0043e2f6 movsd xmm0, qword [rsp + 0x10] | xmm0 = *((rsp + 0x10)); 0x0043e2fc call 0x447b40 | eax = BloombergLP::bdlb::Float::classifyFine(double) (rdi); 0x0043e301 xor r12d, r12d | r12d = 0; 0x0043e304 cmp eax, 0x400f | | if (eax > 0x400f) { 0x0043e309 jg 0x43e5ea | goto label_7; | } 0x0043e30f cmp eax, 8 | | if (eax == 8) { 0x0043e312 je 0x43e5fc | goto label_8; | } 0x0043e318 cmp eax, 0x10 | | if (eax == 0x10) { 0x0043e31b je 0x43e5fc | goto label_8; | } 0x0043e321 jmp 0x43e51e | goto label_2; 0x0043e326 movsx edx, word [r12 + 0xe] | edx = *((r12 + 0xe)); 0x0043e32c cmp edx, 0xe | | if (edx == 0xe) { 0x0043e32f je 0x43e530 | goto label_9; | } 0x0043e335 cmp edx, 5 | | if (edx == 5) { 0x0043e338 je 0x43e530 | goto label_9; | } 0x0043e33e xor eax, eax | eax = 0; 0x0043e340 mov ecx, 0 | ecx = 0; 0x0043e345 cmp edx, 4 | | if (edx != 4) { 0x0043e348 jne 0x43e539 | goto label_10; | } 0x0043e34e movsx rcx, byte [r12] | rcx = *(r12); 0x0043e353 inc r12 | r12++; 0x0043e356 mov rax, r12 | rax = r12; 0x0043e359 jmp 0x43e539 | goto label_10; 0x0043e35e cmp dword [r12 + 8], 0 | 0x0043e364 setne byte [rsp + 0x10] | rsp + 0x10 = (*((r12 + 8)) != 0) ? 1 : 0; 0x0043e369 lea rsi, [rsp + 0x10] | 0x0043e36e mov rdi, r15 | 0x0043e371 call 0x43ef20 | intBloombergLP::baljsn::SimpleFormatter::addValue(boolconst&) (r15, rsp + 0x10); 0x0043e376 jmp 0x43e51b | goto label_5; | } 0x0043e37b mov dword [r14], 1 | *(r14) = 1; 0x0043e382 mov r12d, 0xffffffff | r12d = 0xffffffff; 0x0043e388 jmp 0x43e51e | goto label_2; 0x0043e38d mov eax, dword [r12] | eax = *(r12); 0x0043e391 mov dword [rsp + 0x10], eax | *((rsp + 0x10)) = eax; 0x0043e395 lea rsi, [rsp + 0x10] | 0x0043e39a mov rdi, r15 | 0x0043e39d call 0x43f0e0 | intBloombergLP::baljsn::SimpleFormatter::addValue(BloombergLP::bdlt::Dateconst&) (r15, rsp + 0x10); 0x0043e3a2 jmp 0x43e514 | goto label_6; 0x0043e3a7 movabs rbx, 0x4000000000 | rbx = 0x4000000000; 0x0043e3b1 mov rax, qword [r12] | rax = *(r12); 0x0043e3b5 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0043e3ba cmp rax, rbx | | if (rax < rbx) { 0x0043e3bd jl 0x43e608 | goto label_11; | } 0x0043e3c3 movabs rcx, 0xffffffbfffffffff | rcx = 0xffffffbfffffffff; 0x0043e3cd and rax, rcx | rax &= rcx; | label_3: 0x0043e3d0 or rax, rbx | rax |= rbx; 0x0043e3d3 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0043e3d8 lea rsi, [rsp + 0x10] | 0x0043e3dd mov rdi, r15 | 0x0043e3e0 call 0x43f200 | intBloombergLP::baljsn::SimpleFormatter::addValue(BloombergLP::bdlt::Timeconst&) (r15, rsp + 0x10); 0x0043e3e5 jmp 0x43e514 | goto label_6; 0x0043e3ea mov rbx, qword [r12] | rbx = *(r12); 0x0043e3ee test rbx, rbx | | if (rbx >= 0) { 0x0043e3f1 jns 0x43e617 | goto label_12; | } | label_4: 0x0043e3f7 mov qword [rsp + 0x10], rbx | *((rsp + 0x10)) = rbx; 0x0043e3fc lea rsi, [rsp + 0x10] | 0x0043e401 mov rdi, r15 | 0x0043e404 call 0x43f320 | intBloombergLP::baljsn::SimpleFormatter::addValue(BloombergLP::bdlt::Datetimeconst&) (r15, rsp + 0x10); 0x0043e409 jmp 0x43e514 | goto label_6; 0x0043e40e mov esi, dword [r12 + 8] | 0x0043e413 mov rax, qword [r12] | rax = *(r12); 0x0043e417 mov qword [rsp], rax | *(rsp) = rax; 0x0043e41b xor r12d, r12d | r12d = 0; 0x0043e41e lea rbx, [rsp + 0x10] | rbx = rsp + 0x10; 0x0043e423 mov rdi, rbx | 0x0043e426 xor edx, edx | 0x0043e428 xor ecx, ecx | 0x0043e42a xor r8d, r8d | 0x0043e42d xor r9d, r9d | 0x0043e430 call 0x45ee70 | BloombergLP::bdlt::DatetimeInterval::setInterval(int,long long,long long,long long,long long,long long) (rbx, *((r12 + 8)), 0, 0, 0, 0); 0x0043e435 mov rdi, r15 | 0x0043e438 mov rsi, rbx | 0x0043e43b call 0x43f440 | intBloombergLP::baljsn::SimpleFormatter::addValue(BloombergLP::bdlt::DatetimeIntervalconst&) (r15, rbx); 0x0043e440 mov dword [r14], 1 | *(r14) = 1; 0x0043e447 jmp 0x43e51e | goto label_2; 0x0043e44c cvtsi2sd xmm0, qword [r12] | __asm ("cvtsi2sd xmm0, qword [r12]"); 0x0043e452 movsd qword [rsp + 0x10], xmm0 | *((rsp + 0x10)) = xmm0; 0x0043e458 lea rsi, [rsp + 0x10] | 0x0043e45d mov rdi, r15 | 0x0043e460 call 0x43ed70 | intBloombergLP::baljsn::SimpleFormatter::addValue(doubleconst&) (r15, rsp + 0x10, rdx); 0x0043e465 jmp 0x43e514 | goto label_6; 0x0043e46a cmp word [r12 + 0xe], 0xd | 0x0043e471 mov rbx, qword [r12] | rbx = *(r12); | if (*((r12 + 0xe)) != 0xd) { 0x0043e475 jne 0x43e556 | goto label_13; | } 0x0043e47b test rbx, rbx | | if (rbx == 0) { 0x0043e47e je 0x43e5ae | goto label_14; | } 0x0043e484 mov rbp, qword [rbx] | rbp = *(rbx); 0x0043e487 add rbx, 0x10 | rbx += 0x10; 0x0043e48b jmp 0x43e55b | goto label_15; 0x0043e490 mov rbx, qword [r12] | rbx = *(r12); 0x0043e494 test rbx, rbx | | if (rbx == 0) { 0x0043e497 je 0x43e5d2 | goto label_16; | } 0x0043e49d mov rbp, qword [rbx] | rbp = *(rbx); 0x0043e4a0 mov rdi, r15 | 0x0043e4a3 call 0x441880 | BloombergLP::baljsn::SimpleFormatter::openObject() (r15); 0x0043e4a8 test rbp, rbp | | if (rbp == 0) { 0x0043e4ab je 0x43e5da | goto label_17; | } 0x0043e4b1 add rbx, 0x30 | rbx += 0x30; 0x0043e4b5 mov r13d, 1 | r13d = 1; 0x0043e4bb nop dword [rax + rax] | | label_0: 0x0043e4c0 movupd xmm0, xmmword [rbx - 0x10] | __asm ("movupd xmm0, xmmword [rbx - 0x10]"); 0x0043e4c5 movapd xmmword [rsp + 0x10], xmm0 | __asm ("movapd xmmword [rsp + 0x10], xmm0"); 0x0043e4cb mov rdi, r15 | rdi = r15; 0x0043e4ce mov rsi, rbx | rsi = rbx; 0x0043e4d1 mov rdx, r14 | rdx = r14; 0x0043e4d4 lea rcx, [rsp + 0x10] | rcx = rsp + 0x10; 0x0043e4d9 call 0x43e260 | eax = (anonymousnamespace)::u::encodeValue(BloombergLP::baljsn::SimpleFormatter*,BloombergLP::bdld::Datumconst&,int*,std::_1::basic_string_view>*) (); | } while (1); 0x0043e4de mov r12d, eax | r12d = eax; 0x0043e4e1 test eax, eax | | if (eax != 0) { 0x0043e4e3 jne 0x43e5dd | goto label_18; | } 0x0043e4e9 add rbx, 0x20 | rbx += 0x20; 0x0043e4ed lea rax, [r13 + 1] | rax = r13 + 1; 0x0043e4f1 cmp r13, rbp | 0x0043e4f4 mov r13, rax | r13 = rax; | if (r13 < rbp) { 0x0043e4f7 jb 0x43e4c0 | goto label_0; | } 0x0043e4f9 jmp 0x43e5dd | goto label_18; 0x0043e4fe mov rax, qword [r12] | rax = *(r12); 0x0043e502 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0043e507 lea rsi, [rsp + 0x10] | 0x0043e50c mov rdi, r15 | 0x0043e50f call 0x43f550 | intBloombergLP::baljsn::SimpleFormatter::addValue(BloombergLP::bdldfp::Decimal_Type64const&) (r15, rsp + 0x10); | label_6: 0x0043e514 mov dword [r14], 1 | *(r14) = 1; | label_5: 0x0043e51b xor r12d, r12d | r12d = 0; | label_2: 0x0043e51e mov eax, r12d | eax = r12d; | do { 0x0043e521 add rsp, 0x38 | 0x0043e525 pop rbx | 0x0043e526 pop r12 | 0x0043e528 pop r13 | 0x0043e52a pop r14 | 0x0043e52c pop r15 | 0x0043e52e pop rbp | 0x0043e52f ret | return rax; | label_9: 0x0043e530 mov rax, qword [r12] | rax = *(r12); 0x0043e534 movsxd rcx, dword [r12 + 8] | rcx = *((r12 + 8)); | label_10: 0x0043e539 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0043e53e mov qword [rsp + 0x18], rcx | *((rsp + 0x18)) = rcx; 0x0043e543 lea rsi, [rsp + 0x10] | 0x0043e548 mov rdi, r15 | 0x0043e54b call 0x43ee50 | eax = intBloombergLP::baljsn::SimpleFormatter::addValue>(BloombergLP::bslstl::StringRefImpconst&) (r15, rsp + 0x10); 0x0043e550 neg eax | eax = -eax; 0x0043e552 sbb eax, eax | eax -= eax; 0x0043e554 jmp 0x43e521 | | } while (1); | label_13: 0x0043e556 movsxd rbp, dword [r12 + 8] | rbp = *((r12 + 8)); | label_15: 0x0043e55b test rbp, rbp | | if (rbp == 0) { 0x0043e55e je 0x43e5ae | goto label_14; | } 0x0043e560 mov rdi, r15 | 0x0043e563 mov esi, 1 | 0x0043e568 call 0x441610 | rax = BloombergLP::baljsn::SimpleFormatter::openArray(BloombergLP::baljsn::SimpleFormatter::ArrayFormattingStyle) (r15, 1); 0x0043e56d mov r13d, 1 | r13d = 1; 0x0043e573 nop word cs:[rax + rax] | 0x0043e57d nop dword [rax] | | do { 0x0043e580 mov rdi, r15 | rdi = r15; 0x0043e583 mov rsi, rbx | rsi = rbx; 0x0043e586 mov rdx, r14 | rdx = r14; 0x0043e589 xor ecx, ecx | ecx = 0; 0x0043e58b call 0x43e260 | eax = (anonymousnamespace)::u::encodeValue(BloombergLP::baljsn::SimpleFormatter*,BloombergLP::bdld::Datumconst&,int*,std::_1::basic_string_view>*) (); | goto label_1; 0x0043e590 mov r12d, eax | r12d = eax; 0x0043e593 test eax, eax | | if (eax != 0) { 0x0043e595 jne 0x43e5a7 | goto label_19; | } 0x0043e597 add rbx, 0x10 | rbx += 0x10; 0x0043e59b lea rax, [r13 + 1] | rax = r13 + 1; 0x0043e59f cmp r13, rbp | 0x0043e5a2 mov r13, rax | r13 = rax; 0x0043e5a5 jb 0x43e580 | | } while (r13 < rbp); | label_19: 0x0043e5a7 mov ebx, 1 | ebx = 1; 0x0043e5ac jmp 0x43e5c3 | goto label_20; | label_14: 0x0043e5ae mov ebx, 2 | ebx = 2; 0x0043e5b3 mov rdi, r15 | 0x0043e5b6 mov esi, 2 | 0x0043e5bb call 0x441610 | BloombergLP::baljsn::SimpleFormatter::openArray(BloombergLP::baljsn::SimpleFormatter::ArrayFormattingStyle) (r15, 2); 0x0043e5c0 xor r12d, r12d | r12d = 0; | label_20: 0x0043e5c3 mov rdi, r15 | 0x0043e5c6 mov esi, ebx | 0x0043e5c8 call 0x4414e0 | BloombergLP::baljsn::SimpleFormatter::closeArray(BloombergLP::baljsn::SimpleFormatter::ArrayFormattingStyle) (r15, ebx, rdx); 0x0043e5cd jmp 0x43e51e | goto label_2; | label_16: 0x0043e5d2 mov rdi, r15 | 0x0043e5d5 call 0x441880 | BloombergLP::baljsn::SimpleFormatter::openObject() (r15); | label_17: 0x0043e5da xor r12d, r12d | r12d = 0; | label_18: 0x0043e5dd mov rdi, r15 | 0x0043e5e0 call 0x441580 | eax = BloombergLP::baljsn::SimpleFormatter::closeObject() (r15, rsi); 0x0043e5e5 jmp 0x43e51e | goto label_2; | label_7: 0x0043e5ea cmp eax, 0x8008 | | if (eax == 0x8008) { 0x0043e5ef je 0x43e5fc | goto label_8; | } 0x0043e5f1 cmp eax, 0x4010 | | if (eax != 0x4010) { 0x0043e5f6 jne 0x43e51e | goto label_2; | } | label_8: 0x0043e5fc mov dword [r14], 2 | *(r14) = 2; 0x0043e603 jmp 0x43e51e | goto label_2; | label_11: 0x0043e608 lea rdi, [rsp + 0x10] | 0x0043e60d call 0x464360 | BloombergLP::bdlt::Time::invalidMicrosecondsFromMidnight()const (rsp + 0x10); 0x0043e612 jmp 0x43e3d0 | goto label_3; | label_12: 0x0043e617 mov edi, 0x72603c | 0x0043e61c call 0x4927d0 | eax = BloombergLP::bsls::Review::updateCount(BloombergLP::bsls::Atomic_TypeTraits::Int*) (method.BloombergLP::bdlt::Datetime.validateAndTraceLogRepresentation___const::lambda__1::operator_____const::count); 0x0043e621 mov qword [rsp + 0x10], 0x4d261e | *((rsp + 0x10)) = "detected invalid 'bdlt::Datetime'; see TEAM 579660115"; 0x0043e62a mov qword [rsp + 0x18], 0x4d2654 | *((rsp + 0x18)) = "/home/parsa/experiments/assumptions/crush/ccm-none/groups/bdl/bdlt/bdlt_datetime.h"; 0x0043e633 mov dword [rsp + 0x20], 0x466 | *((rsp + 0x20)) = 0x466; 0x0043e63b mov qword [rsp + 0x28], 0x4f1119 | *((rsp + 0x28)) = "R-INV"; 0x0043e644 mov dword [rsp + 0x30], eax | *((rsp + 0x30)) = eax; 0x0043e648 lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x0043e64d call 0x4927f0 | BloombergLP::bsls::Review::invokeHandler(BloombergLP::bsls::ReviewViolationconst&) (); 0x0043e652 mov rax, rbx | rax = rbx; 0x0043e655 shr rax, 0x20 | rax >>= 0x20; 0x0043e659 shl rbx, 0x25 | rbx <<= 0x25; 0x0043e65d movabs rcx, 0x7fffffe000000000 | rcx = 0x7fffffe000000000; 0x0043e667 add rcx, rbx | rcx += rbx; 0x0043e66a imul rax, rax, 0x3e8 | rax *= 0x3e8; 0x0043e671 movabs rbx, 0x8000000000000000 | rbx = 0x8000000000000000; 0x0043e67b or rbx, rcx | rbx |= rcx; 0x0043e67e or rbx, rax | rbx |= rax; 0x0043e681 jmp 0x43e3f7 | goto label_4; | }