; assembly | /* r2dec pseudo code output */ | /* baljsn_datumutil.t/assume @ 0x43e0b0 */ | #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: 0x0043e0b0 push rbp | 0x0043e0b1 push r15 | 0x0043e0b3 push r14 | 0x0043e0b5 push r13 | 0x0043e0b7 push r12 | 0x0043e0b9 push rbx | 0x0043e0ba sub rsp, 0x38 | 0x0043e0be mov r14, rdx | r14 = rdx; 0x0043e0c1 mov r12, rsi | r12 = rsi; 0x0043e0c4 mov r15, rdi | r15 = rdi; 0x0043e0c7 movsx rax, word [rsi + 0xe] | rax = *((rsi + 0xe)); 0x0043e0cc mov eax, eax | 0x0043e0ce mov ebx, dword [rax*4 + 0x4d1760] | ebx = *((rax*4 + method.BloombergLP::bdld::Datum.type___const::convert)); 0x0043e0d5 test rcx, rcx | | if (rcx != 0) { 0x0043e0d8 je 0x43e0e5 | 0x0043e0da mov rdi, r15 | 0x0043e0dd mov rsi, rcx | 0x0043e0e0 call 0x43ea20 | BloombergLP::baljsn::SimpleFormatter::addMemberName(std::_1::basic_string_view>const&) (r15, rcx); | } 0x0043e0e5 cmp ebx, 0xf | | if (ebx <= 0xf) { 0x0043e0e8 ja 0x43e1b5 | 0x0043e0ee mov eax, ebx | eax = ebx; | /* switch table (16 cases) at 0x4d18e0 */ 0x0043e0f0 jmp qword [rax*8 + 0x4d18e0] | 0x0043e0f7 mov rdi, r15 | 0x0043e0fa call 0x43ee40 | BloombergLP::baljsn::SimpleFormatter::addNullValue() (r15); 0x0043e0ff jmp 0x43e35b | goto label_6; 0x0043e104 mov eax, dword [r12 + 8] | eax = *((r12 + 8)); 0x0043e109 mov dword [rsp + 0x10], eax | *((rsp + 0x10)) = eax; 0x0043e10d lea rsi, [rsp + 0x10] | 0x0043e112 mov rdi, r15 | 0x0043e115 call 0x43ead0 | intBloombergLP::baljsn::SimpleFormatter::addValue(intconst&) (r15, rsp + 0x10); 0x0043e11a jmp 0x43e354 | goto label_7; 0x0043e11f movsd xmm0, qword [r12] | xmm0 = *(r12); 0x0043e125 movsd qword [rsp + 0x10], xmm0 | *((rsp + 0x10)) = xmm0; 0x0043e12b lea rsi, [rsp + 0x10] | 0x0043e130 mov rdi, r15 | 0x0043e133 call 0x43eba0 | eax = intBloombergLP::baljsn::SimpleFormatter::addValue(doubleconst&) (r15, rsp + 0x10, rdx); 0x0043e138 mov r12d, 2 | r12d = 2; 0x0043e13e test eax, eax | | if (eax != 0) { 0x0043e140 jne 0x43e35e | goto label_2; | } 0x0043e146 movsd xmm0, qword [rsp + 0x10] | xmm0 = *((rsp + 0x10)); 0x0043e14c call 0x4475d0 | eax = BloombergLP::bdlb::Float::classifyFine(double) (rdi); 0x0043e151 xor r12d, r12d | r12d = 0; 0x0043e154 cmp eax, 0x400f | | if (eax > 0x400f) { 0x0043e159 jg 0x43e422 | goto label_8; | } 0x0043e15f cmp eax, 8 | | if (eax == 8) { 0x0043e162 je 0x43e434 | goto label_9; | } 0x0043e168 cmp eax, 0x10 | | if (eax == 0x10) { 0x0043e16b je 0x43e434 | goto label_9; | } 0x0043e171 jmp 0x43e35e | goto label_2; 0x0043e176 movsx eax, word [r12 + 0xe] | eax = *((r12 + 0xe)); 0x0043e17c cmp eax, 0xe | | if (eax != 0xe) { 0x0043e17f je 0x43e18a | 0x0043e181 cmp eax, 5 | | if (eax != 5) { 0x0043e184 jne 0x43e3fa | goto label_10; | } | } 0x0043e18a movsxd rax, dword [r12 + 8] | rax = *((r12 + 8)); 0x0043e18f mov r12, qword [r12] | r12 = *(r12); 0x0043e193 jmp 0x43e402 | goto label_11; 0x0043e198 cmp dword [r12 + 8], 0 | 0x0043e19e setne byte [rsp + 0x10] | rsp + 0x10 = (*((r12 + 8)) != 0) ? 1 : 0; 0x0043e1a3 lea rsi, [rsp + 0x10] | 0x0043e1a8 mov rdi, r15 | 0x0043e1ab call 0x43ed50 | intBloombergLP::baljsn::SimpleFormatter::addValue(boolconst&) (r15, rsp + 0x10); 0x0043e1b0 jmp 0x43e35b | goto label_6; | } 0x0043e1b5 mov dword [r14], 1 | *(r14) = 1; 0x0043e1bc mov r12d, 0xffffffff | r12d = 0xffffffff; 0x0043e1c2 jmp 0x43e35e | goto label_2; 0x0043e1c7 mov eax, dword [r12] | eax = *(r12); 0x0043e1cb mov dword [rsp + 0x10], eax | *((rsp + 0x10)) = eax; 0x0043e1cf lea rsi, [rsp + 0x10] | 0x0043e1d4 mov rdi, r15 | 0x0043e1d7 call 0x43ef10 | intBloombergLP::baljsn::SimpleFormatter::addValue(BloombergLP::bdlt::Dateconst&) (r15, rsp + 0x10); 0x0043e1dc jmp 0x43e354 | goto label_7; 0x0043e1e1 movabs rbx, 0x4000000000 | rbx = 0x4000000000; 0x0043e1eb mov rax, qword [r12] | rax = *(r12); 0x0043e1ef mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0043e1f4 cmp rax, rbx | | if (rax < rbx) { 0x0043e1f7 jl 0x43e440 | goto label_12; | } 0x0043e1fd movabs rcx, 0xffffffbfffffffff | rcx = 0xffffffbfffffffff; 0x0043e207 and rax, rcx | rax &= rcx; | label_4: 0x0043e20a or rax, rbx | rax |= rbx; 0x0043e20d mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0043e212 lea rsi, [rsp + 0x10] | 0x0043e217 mov rdi, r15 | 0x0043e21a call 0x43f030 | intBloombergLP::baljsn::SimpleFormatter::addValue(BloombergLP::bdlt::Timeconst&) (r15, rsp + 0x10); 0x0043e21f jmp 0x43e354 | goto label_7; 0x0043e224 mov rbx, qword [r12] | rbx = *(r12); 0x0043e228 test rbx, rbx | | if (rbx >= 0) { 0x0043e22b jns 0x43e44f | goto label_13; | } | label_5: 0x0043e231 mov qword [rsp + 0x10], rbx | *((rsp + 0x10)) = rbx; 0x0043e236 lea rsi, [rsp + 0x10] | 0x0043e23b mov rdi, r15 | 0x0043e23e call 0x43f150 | intBloombergLP::baljsn::SimpleFormatter::addValue(BloombergLP::bdlt::Datetimeconst&) (r15, rsp + 0x10); 0x0043e243 jmp 0x43e354 | goto label_7; 0x0043e248 mov esi, dword [r12 + 8] | 0x0043e24d mov rax, qword [r12] | rax = *(r12); 0x0043e251 mov qword [rsp], rax | *(rsp) = rax; 0x0043e255 xor r12d, r12d | r12d = 0; 0x0043e258 lea rbx, [rsp + 0x10] | rbx = rsp + 0x10; 0x0043e25d mov rdi, rbx | 0x0043e260 xor edx, edx | 0x0043e262 xor ecx, ecx | 0x0043e264 xor r8d, r8d | 0x0043e267 xor r9d, r9d | 0x0043e26a call 0x45e700 | BloombergLP::bdlt::DatetimeInterval::setInterval(int,long long,long long,long long,long long,long long) (rbx, *((r12 + 8)), 0, 0, 0, 0); 0x0043e26f mov rdi, r15 | 0x0043e272 mov rsi, rbx | 0x0043e275 call 0x43f270 | intBloombergLP::baljsn::SimpleFormatter::addValue(BloombergLP::bdlt::DatetimeIntervalconst&) (r15, rbx); 0x0043e27a mov dword [r14], 1 | *(r14) = 1; 0x0043e281 jmp 0x43e35e | goto label_2; 0x0043e286 cvtsi2sd xmm0, qword [r12] | __asm ("cvtsi2sd xmm0, qword [r12]"); 0x0043e28c movsd qword [rsp + 0x10], xmm0 | *((rsp + 0x10)) = xmm0; 0x0043e292 lea rsi, [rsp + 0x10] | 0x0043e297 mov rdi, r15 | 0x0043e29a call 0x43eba0 | intBloombergLP::baljsn::SimpleFormatter::addValue(doubleconst&) (r15, rsp + 0x10, rdx); 0x0043e29f jmp 0x43e354 | goto label_7; 0x0043e2a4 cmp word [r12 + 0xe], 0xd | 0x0043e2ab mov rbx, qword [r12] | rbx = *(r12); | if (*((r12 + 0xe)) != 0xd) { 0x0043e2af jne 0x43e370 | goto label_14; | } 0x0043e2b5 test rbx, rbx | | if (rbx == 0) { 0x0043e2b8 je 0x43e3be | goto label_15; | } 0x0043e2be mov rbp, qword [rbx] | rbp = *(rbx); 0x0043e2c1 add rbx, 0x10 | rbx += 0x10; 0x0043e2c5 jmp 0x43e375 | goto label_16; 0x0043e2ca mov rbx, qword [r12] | rbx = *(r12); 0x0043e2ce test rbx, rbx | | if (rbx == 0) { 0x0043e2d1 je 0x43e3e2 | goto label_17; | } 0x0043e2d7 mov rbp, qword [rbx] | rbp = *(rbx); 0x0043e2da mov rdi, r15 | 0x0043e2dd call 0x4416b0 | BloombergLP::baljsn::SimpleFormatter::openObject() (r15); 0x0043e2e2 test rbp, rbp | | if (rbp == 0) { 0x0043e2e5 je 0x43e3ea | goto label_18; | } 0x0043e2eb add rbx, 0x30 | rbx += 0x30; 0x0043e2ef mov r13d, 1 | r13d = 1; 0x0043e2f5 nop word cs:[rax + rax] | 0x0043e2ff nop | | label_0: 0x0043e300 movupd xmm0, xmmword [rbx - 0x10] | __asm ("movupd xmm0, xmmword [rbx - 0x10]"); 0x0043e305 movapd xmmword [rsp + 0x10], xmm0 | __asm ("movapd xmmword [rsp + 0x10], xmm0"); 0x0043e30b mov rdi, r15 | rdi = r15; 0x0043e30e mov rsi, rbx | rsi = rbx; 0x0043e311 mov rdx, r14 | rdx = r14; 0x0043e314 lea rcx, [rsp + 0x10] | rcx = rsp + 0x10; 0x0043e319 call 0x43e0b0 | eax = (anonymousnamespace)::u::encodeValue(BloombergLP::baljsn::SimpleFormatter*,BloombergLP::bdld::Datumconst&,int*,std::_1::basic_string_view>*) (); | } while (1); 0x0043e31e mov r12d, eax | r12d = eax; 0x0043e321 test eax, eax | | if (eax != 0) { 0x0043e323 jne 0x43e3ed | goto label_19; | } 0x0043e329 add rbx, 0x20 | rbx += 0x20; 0x0043e32d lea rax, [r13 + 1] | rax = r13 + 1; 0x0043e331 cmp r13, rbp | 0x0043e334 mov r13, rax | r13 = rax; | if (r13 < rbp) { 0x0043e337 jb 0x43e300 | goto label_0; | } 0x0043e339 jmp 0x43e3ed | goto label_19; 0x0043e33e mov rax, qword [r12] | rax = *(r12); 0x0043e342 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0043e347 lea rsi, [rsp + 0x10] | 0x0043e34c mov rdi, r15 | 0x0043e34f call 0x43f380 | intBloombergLP::baljsn::SimpleFormatter::addValue(BloombergLP::bdldfp::Decimal_Type64const&) (r15, rsp + 0x10); | label_7: 0x0043e354 mov dword [r14], 1 | *(r14) = 1; | label_6: 0x0043e35b xor r12d, r12d | r12d = 0; | label_2: 0x0043e35e mov eax, r12d | eax = r12d; | label_3: 0x0043e361 add rsp, 0x38 | 0x0043e365 pop rbx | 0x0043e366 pop r12 | 0x0043e368 pop r13 | 0x0043e36a pop r14 | 0x0043e36c pop r15 | 0x0043e36e pop rbp | 0x0043e36f ret | return rax; | label_14: 0x0043e370 movsxd rbp, dword [r12 + 8] | rbp = *((r12 + 8)); | label_16: 0x0043e375 test rbp, rbp | | if (rbp == 0) { 0x0043e378 je 0x43e3be | goto label_15; | } 0x0043e37a mov rdi, r15 | 0x0043e37d mov esi, 1 | 0x0043e382 call 0x441440 | rax = BloombergLP::baljsn::SimpleFormatter::openArray(BloombergLP::baljsn::SimpleFormatter::ArrayFormattingStyle) (r15, 1); 0x0043e387 mov r13d, 1 | r13d = 1; 0x0043e38d nop dword [rax] | | do { 0x0043e390 mov rdi, r15 | rdi = r15; 0x0043e393 mov rsi, rbx | rsi = rbx; 0x0043e396 mov rdx, r14 | rdx = r14; 0x0043e399 xor ecx, ecx | ecx = 0; 0x0043e39b call 0x43e0b0 | eax = (anonymousnamespace)::u::encodeValue(BloombergLP::baljsn::SimpleFormatter*,BloombergLP::bdld::Datumconst&,int*,std::_1::basic_string_view>*) (); | goto label_1; 0x0043e3a0 mov r12d, eax | r12d = eax; 0x0043e3a3 test eax, eax | | if (eax != 0) { 0x0043e3a5 jne 0x43e3b7 | goto label_20; | } 0x0043e3a7 add rbx, 0x10 | rbx += 0x10; 0x0043e3ab lea rax, [r13 + 1] | rax = r13 + 1; 0x0043e3af cmp r13, rbp | 0x0043e3b2 mov r13, rax | r13 = rax; 0x0043e3b5 jb 0x43e390 | | } while (r13 < rbp); | label_20: 0x0043e3b7 mov ebx, 1 | ebx = 1; 0x0043e3bc jmp 0x43e3d3 | goto label_21; | label_15: 0x0043e3be mov ebx, 2 | ebx = 2; 0x0043e3c3 mov rdi, r15 | 0x0043e3c6 mov esi, 2 | 0x0043e3cb call 0x441440 | BloombergLP::baljsn::SimpleFormatter::openArray(BloombergLP::baljsn::SimpleFormatter::ArrayFormattingStyle) (r15, 2); 0x0043e3d0 xor r12d, r12d | r12d = 0; | label_21: 0x0043e3d3 mov rdi, r15 | 0x0043e3d6 mov esi, ebx | 0x0043e3d8 call 0x441310 | BloombergLP::baljsn::SimpleFormatter::closeArray(BloombergLP::baljsn::SimpleFormatter::ArrayFormattingStyle) (r15, ebx, rdx); 0x0043e3dd jmp 0x43e35e | goto label_2; | label_17: 0x0043e3e2 mov rdi, r15 | 0x0043e3e5 call 0x4416b0 | BloombergLP::baljsn::SimpleFormatter::openObject() (r15); | label_18: 0x0043e3ea xor r12d, r12d | r12d = 0; | label_19: 0x0043e3ed mov rdi, r15 | 0x0043e3f0 call 0x4413b0 | BloombergLP::baljsn::SimpleFormatter::closeObject() (r15, rsi); 0x0043e3f5 jmp 0x43e35e | goto label_2; | label_10: 0x0043e3fa movsx rax, byte [r12] | rax = *(r12); 0x0043e3ff inc r12 | r12++; | label_11: 0x0043e402 mov qword [rsp + 0x10], r12 | *((rsp + 0x10)) = r12; 0x0043e407 mov qword [rsp + 0x18], rax | *((rsp + 0x18)) = rax; 0x0043e40c lea rsi, [rsp + 0x10] | 0x0043e411 mov rdi, r15 | 0x0043e414 call 0x43ec80 | eax = intBloombergLP::baljsn::SimpleFormatter::addValue>(BloombergLP::bslstl::StringRefImpconst&) (r15, rsp + 0x10); 0x0043e419 neg eax | eax = -eax; 0x0043e41b sbb eax, eax | eax -= eax; 0x0043e41d jmp 0x43e361 | goto label_3; | label_8: 0x0043e422 cmp eax, 0x8008 | | if (eax == 0x8008) { 0x0043e427 je 0x43e434 | goto label_9; | } 0x0043e429 cmp eax, 0x4010 | | if (eax != 0x4010) { 0x0043e42e jne 0x43e35e | goto label_2; | } | label_9: 0x0043e434 mov dword [r14], 2 | *(r14) = 2; 0x0043e43b jmp 0x43e35e | goto label_2; | label_12: 0x0043e440 lea rdi, [rsp + 0x10] | 0x0043e445 call 0x4637e0 | BloombergLP::bdlt::Time::invalidMicrosecondsFromMidnight()const (rsp + 0x10); 0x0043e44a jmp 0x43e20a | goto label_4; | label_13: 0x0043e44f mov edi, 0x72503c | 0x0043e454 call 0x491c60 | eax = BloombergLP::bsls::Review::updateCount(BloombergLP::bsls::Atomic_TypeTraits::Int*) (method.BloombergLP::bdlt::Datetime.validateAndTraceLogRepresentation___const::lambda__1::operator_____const::count); 0x0043e459 mov qword [rsp + 0x10], 0x4d1a6e | *((rsp + 0x10)) = "detected invalid 'bdlt::Datetime'; see TEAM 579660115"; 0x0043e462 mov qword [rsp + 0x18], 0x4d1aa4 | *((rsp + 0x18)) = "/home/parsa/experiments/assumptions/crush/ccm-assume/groups/bdl/bdlt/bdlt_datetime.h"; 0x0043e46b mov dword [rsp + 0x20], 0x466 | *((rsp + 0x20)) = 0x466; 0x0043e473 mov qword [rsp + 0x28], 0x4f0479 | *((rsp + 0x28)) = "R-INV"; 0x0043e47c mov dword [rsp + 0x30], eax | *((rsp + 0x30)) = eax; 0x0043e480 lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x0043e485 call 0x491c80 | BloombergLP::bsls::Review::invokeHandler(BloombergLP::bsls::ReviewViolationconst&) (); 0x0043e48a mov rax, rbx | rax = rbx; 0x0043e48d shr rax, 0x20 | rax >>= 0x20; 0x0043e491 shl rbx, 0x25 | rbx <<= 0x25; 0x0043e495 movabs rcx, 0x7fffffe000000000 | rcx = 0x7fffffe000000000; 0x0043e49f add rcx, rbx | rcx += rbx; 0x0043e4a2 imul rax, rax, 0x3e8 | rax *= 0x3e8; 0x0043e4a9 movabs rbx, 0x8000000000000000 | rbx = 0x8000000000000000; 0x0043e4b3 or rbx, rcx | rbx |= rcx; 0x0043e4b6 or rbx, rax | rbx |= rax; 0x0043e4b9 jmp 0x43e231 | goto label_5; | }