; assembly | /* r2dec pseudo code output */ | /* ball_recordjsonformatter.t/none @ 0x41a9a0 */ | #include | ; (fcn) method.BloombergLP::ball._anonymous_namespace_::TimestampFormatter::format_BloombergLP::baljsn::SimpleFormatter__BloombergLP::ball::Record_const_ () | int64_t method_BloombergLP::ball_anonymous_namespace_::TimestampFormatter::format_BloombergLP::baljsn::SimpleFormatter_BloombergLP::ball::Record_const_ (int64_t arg3, int64_t arg2, uint32_t arg1) { | int64_t var_8h; | int64_t var_10h; | int64_t var_18h; | int64_t var_20h; | int64_t var_28h; | char * var_30h; | char * var_38h; | int64_t var_40h; | char * var_48h; | int64_t var_50h; | int64_t var_58h; | int64_t var_60h; | int64_t var_68h; | int64_t var_70h; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::ball::(anonymous namespace)::TimestampFormatter::format(BloombergLP::baljsn::SimpleFormatter*, BloombergLP::ball::Record const&) */ 0x0041a9a0 push r15 | 0x0041a9a2 push r14 | 0x0041a9a4 push r12 | 0x0041a9a6 push rbx | 0x0041a9a7 sub rsp, 0x78 | 0x0041a9ab mov rbx, rdx | rbx = rdx; 0x0041a9ae mov r14, rsi | r14 = rsi; 0x0041a9b1 mov r15, rdi | r15 = rdi; 0x0041a9b4 mov dword [rsp + 0x20], 0 | *((rsp + 0x20)) = 0; 0x0041a9bc mov qword [rsp + 0x28], 0 | *((rsp + 0x28)) = 0; 0x0041a9c5 cmp dword [rdi + 0x3c], 0 | | if (*((rdi + 0x3c)) == 0) { 0x0041a9c9 jne 0x41aa17 | 0x0041a9cb lea rdi, [rbx + 0x18] | rdi = rbx + 0x18; 0x0041a9cf mov rax, qword [rip + 0x2c95ca] | rax = BloombergLP::bdlt::LocalTimeOffset::s_localTimeOffsetCallback_p; 0x0041a9d6 call rax | rax = void (*rax)() (); 0x0041a9d8 mov rcx, rax | rcx = rax; 0x0041a9db movabs rdx, 0x1845c8a0ce512957 | rdx = 0x1845c8a0ce512957; 0x0041a9e5 imul rdx | rdx:rax = rax * rdx; 0x0041a9e8 mov rax, rdx | rax = rdx; 0x0041a9eb shr rax, 0x3f | rax >>= 0x3f; 0x0041a9ef sar rdx, 0xd | rdx >>= 0xd; 0x0041a9f3 add rdx, rax | rdx += rax; 0x0041a9f6 imul rax, rdx, 0x15180 | rax = rdx * 0x15180; 0x0041a9fd sub rcx, rax | rcx -= rax; 0x0041aa00 imul rax, rcx, 0xf4240 | rax = rcx * 0xf4240; 0x0041aa07 lea rdi, [rsp + 0x20] | 0x0041aa0c mov rsi, rdx | 0x0041aa0f mov rdx, rax | 0x0041aa12 call 0x43f880 | BloombergLP::bdlt::DatetimeInterval::assign(long long,long long) (rsp + 0x20, rdx, rax); | } 0x0041aa17 movabs r12, 0x8000000000000000 | r12 = 0x8000000000000000; 0x0041aa21 mov rbx, qword [rbx + 0x18] | rbx = *((rbx + 0x18)); 0x0041aa25 test rbx, rbx | 0x0041aa28 jns 0x41abdf | | while (1) { 0x0041aa2e movabs rax, 0x1ffffffc00 | rax = 0x1ffffffc00; 0x0041aa38 mov rcx, rbx | rcx = rbx; 0x0041aa3b and rcx, rax | rcx &= rax; 0x0041aa3e movabs rdx, 0xffffffebe228a000 | rdx = 0xffffffebe228a000; 0x0041aa48 add rdx, rcx | rdx += rcx; 0x0041aa4b shr rdx, 0xa | rdx >>= 0xa; 0x0041aa4f mov rsi, rbx | rsi = rbx; 0x0041aa52 shr rsi, 0x25 | rsi >>= 0x25; 0x0041aa56 and esi, 0x3ffffff | esi &= 0x3ffffff; 0x0041aa5c movabs rdi, 0x141dd76000 | rdi = 0x141dd76000; 0x0041aa66 imul rsi, rdi | rsi *= rdi; 0x0041aa6a or rax, 0x3ff | rax |= 0x3ff; 0x0041aa70 and rax, rbx | rax &= rbx; 0x0041aa73 xor ecx, ecx | ecx = 0; 0x0041aa75 cmp rdx, 0x35a4e9 | | if (rdx >= 0x35a4e9) { 0x0041aa7c cmovae rcx, rax | rcx = rax; | } 0x0041aa80 add rcx, rsi | rcx += rsi; 0x0041aa83 movsxd rax, dword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x0041aa88 imul ebx, eax, 0x5a0 | ebx = eax * 0x5a0; 0x0041aa8e imul rax, rdi | rax *= rdi; 0x0041aa92 mov rsi, qword [rsp + 0x28] | rsi = *((rsp + 0x28)); 0x0041aa97 add rcx, rsi | rcx += rsi; 0x0041aa9a add rcx, rax | rcx += rax; 0x0041aa9d movabs rdx, 0x32e73fb956a1b897 | rdx = 0x32e73fb956a1b897; 0x0041aaa7 mov rax, rcx | rax = rcx; 0x0041aaaa mul rdx | rdx:rax = rax * rdx; 0x0041aaad shr rdx, 0x22 | rdx >>= 0x22; 0x0041aab1 mov rax, rdx | rax = rdx; 0x0041aab4 shl rax, 0x25 | rax <<= 0x25; 0x0041aab8 imul rdx, rdi | rdx *= rdi; 0x0041aabc sub rcx, rdx | rcx -= rdx; 0x0041aabf or rcx, rax | rcx |= rax; 0x0041aac2 or rcx, r12 | rcx |= r12; 0x0041aac5 movabs rdx, 0x8f2a633943a6d729 | rdx = 0x8f2a633943a6d729; 0x0041aacf mov rax, rsi | rax = rsi; 0x0041aad2 imul rdx | rdx:rax = rax * rdx; 0x0041aad5 add rdx, rsi | rdx += rsi; 0x0041aad8 mov rax, rdx | rax = rdx; 0x0041aadb shr rax, 0x3f | rax >>= 0x3f; 0x0041aadf shr rdx, 0x19 | rdx >>= 0x19; 0x0041aae3 add edx, eax | edx += eax; 0x0041aae5 add edx, ebx | edx += ebx; 0x0041aae7 mov qword [rsp + 0x68], rcx | *((rsp + 0x68)) = rcx; 0x0041aaec mov dword [rsp + 0x70], edx | *((rsp + 0x70)) = edx; 0x0041aaf0 mov edx, dword [r15 + 0x38] | edx = *((r15 + 0x38)); 0x0041aaf4 test edx, edx | | if (edx != 0) { 0x0041aaf6 je 0x41ab82 | 0x0041aafc mov eax, 0xffffffff | eax = 0xffffffff; 0x0041ab01 cmp edx, 1 | | if (edx != 1) { 0x0041ab04 jne 0x41abd3 | goto label_0; | } 0x0041ab0a mov dword [rsp + 8], 3 | *((rsp + 8)) = 3; 0x0041ab12 mov esi, dword [r15 + 0x40] | 0x0041ab16 lea rdi, [rsp + 8] | 0x0041ab1b call 0x4441f0 | BloombergLP::bdlt::Iso8601UtilConfiguration::setFractionalSecondPrecision(int) (rsp + 8, *((r15 + 0x40))); 0x0041ab20 lea rdi, [rsp + 8] | 0x0041ab25 mov esi, 1 | 0x0041ab2a call 0x444210 | BloombergLP::bdlt::Iso8601UtilConfiguration::setUseZAbbreviationForUtc(bool) (rsp + 8, 1); 0x0041ab2f lea rbx, [rsp + 0x30] | rbx = rsp + 0x30; 0x0041ab34 lea rsi, [rsp + 0x68] | 0x0041ab39 lea rdx, [rsp + 8] | 0x0041ab3e mov rdi, rbx | 0x0041ab41 call 0x4422a0 | rax = BloombergLP::bdlt::Iso8601Util::generateRaw(char*,BloombergLP::bdlt::DatetimeTzconst&,BloombergLP::bdlt::Iso8601UtilConfigurationconst&) (rbx, rsp + 0x68, rsp + 8); 0x0041ab46 lea rcx, [r15 + 8] | rcx = r15 + 8; 0x0041ab4a cmp qword [r15 + 0x28], 0x17 | | if (*((r15 + 0x28)) != 0x17) { 0x0041ab4f je 0x41ab54 | 0x0041ab51 mov rcx, qword [rcx] | rcx = *(rcx); | } 0x0041ab54 mov rdx, qword [r15 + 0x20] | rdx = *((r15 + 0x20)); 0x0041ab58 mov qword [rsp + 0x10], rcx | *((rsp + 0x10)) = rcx; 0x0041ab5d mov qword [rsp + 0x18], rdx | *((rsp + 0x18)) = rdx; 0x0041ab62 cdqe | rax = (int64_t) eax; 0x0041ab64 mov qword [rsp + 0x58], rbx | *((rsp + 0x58)) = rbx; 0x0041ab69 mov qword [rsp + 0x60], rax | *((rsp + 0x60)) = rax; 0x0041ab6e lea rsi, [rsp + 0x10] | 0x0041ab73 lea rdx, [rsp + 0x58] | 0x0041ab78 mov rdi, r14 | 0x0041ab7b call 0x41c770 | intBloombergLP::baljsn::SimpleFormatter::addValue>>(std::_1::basic_string_view>const&,std::_1::basic_string_view>const&) (r14, rsp + 0x10, rsp + 0x58); 0x0041ab80 jmp 0x41abcd | | } else { 0x0041ab82 mov qword [rsp + 0x10], rcx | *((rsp + 0x10)) = rcx; 0x0041ab87 mov ecx, dword [r15 + 0x40] | 0x0041ab8b lea rdi, [rsp + 0x10] | 0x0041ab90 lea rsi, [rsp + 0x30] | 0x0041ab95 mov edx, 0x20 | 0x0041ab9a call 0x43f560 | BloombergLP::bdlt::Datetime::printToBuffer(char*,int,int)const (rsp + 0x10, rsp + 0x30, 0x20, *((r15 + 0x40))); 0x0041ab9f lea rax, [r15 + 8] | rax = r15 + 8; 0x0041aba3 cmp qword [r15 + 0x28], 0x17 | | if (*((r15 + 0x28)) != 0x17) { 0x0041aba8 je 0x41abad | 0x0041abaa mov rax, qword [rax] | rax = *(rax); | } 0x0041abad mov rcx, qword [r15 + 0x20] | rcx = *((r15 + 0x20)); 0x0041abb1 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0041abb6 mov qword [rsp + 0x18], rcx | *((rsp + 0x18)) = rcx; 0x0041abbb lea rsi, [rsp + 0x10] | 0x0041abc0 lea rdx, [rsp + 0x30] | 0x0041abc5 mov rdi, r14 | 0x0041abc8 call 0x41c830 | eax = intBloombergLP::baljsn::SimpleFormatter::addValue(std::_1::basic_string_view>const&,char const(&)[32]) (r14, rsp + 0x10, rsp + 0x30); | } 0x0041abcd test eax, eax | | if (eax == 0) { 0x0041abcf jne 0x41abd3 | 0x0041abd1 xor eax, eax | eax = 0; | } | label_0: 0x0041abd3 add rsp, 0x78 | 0x0041abd7 pop rbx | 0x0041abd8 pop r12 | 0x0041abda pop r14 | 0x0041abdc pop r15 | 0x0041abde ret | return rax; 0x0041abdf mov edi, 0x6ed930 | 0x0041abe4 call 0x474700 | eax = BloombergLP::bsls::Review::updateCount(BloombergLP::bsls::Atomic_TypeTraits::Int*) (method.BloombergLP::bdlt::Datetime.validateAndTraceLogRepresentation___const::lambda__1::operator_____const::count); 0x0041abe9 mov qword [rsp + 0x30], 0x49b1e1 | *((rsp + 0x30)) = "detected invalid 'bdlt::Datetime'; see TEAM 579660115"; 0x0041abf2 mov qword [rsp + 0x38], 0x49b217 | *((rsp + 0x38)) = "/home/parsa/experiments/assumptions/crush/ccm-none/groups/bdl/bdlt/bdlt_datetime.h"; 0x0041abfb mov dword [rsp + 0x40], 0x466 | *((rsp + 0x40)) = 0x466; 0x0041ac03 mov qword [rsp + 0x48], 0x4bae99 | *((rsp + 0x48)) = "R-INV"; 0x0041ac0c mov dword [rsp + 0x50], eax | *((rsp + 0x50)) = eax; 0x0041ac10 lea rdi, [rsp + 0x30] | rdi = rsp + 0x30; 0x0041ac15 call 0x474720 | BloombergLP::bsls::Review::invokeHandler(BloombergLP::bsls::ReviewViolationconst&) (); 0x0041ac1a mov rax, rbx | rax = rbx; 0x0041ac1d shr rax, 0x20 | rax >>= 0x20; 0x0041ac21 shl rbx, 0x25 | rbx <<= 0x25; 0x0041ac25 movabs rcx, 0x7fffffe000000000 | rcx = 0x7fffffe000000000; 0x0041ac2f add rcx, rbx | rcx += rbx; 0x0041ac32 imul rbx, rax, 0x3e8 | rbx = rax * 0x3e8; 0x0041ac39 or rbx, rcx | rbx |= rcx; 0x0041ac3c or rbx, r12 | rbx |= r12; 0x0041ac3f jmp 0x41aa2e | | } | }