; assembly | /* r2dec pseudo code output */ | /* ball_recordjsonformatter.t/none @ 0x419530 */ | #include | ; (fcn) method.BloombergLP::ball::RecordJsonFormatter.setFormat_std::__1::basic_string_view_char__std::__1::char_traits_char____const_ () | int64_t method_BloombergLP::ball::RecordJsonFormatter_setFormat_std::_1::basic_string_view_char_std::_1::char_traits_char_const_ (char * arg2, char * arg1) { | int64_t var_10h; | int64_t var_1ch; | int64_t var_20h; | int64_t var_28h; | int64_t var_30h; | int64_t var_31h; | int64_t var_38h; | int64_t var_40h; | int64_t var_48h; | int64_t var_50h; | int64_t var_58h; | int64_t var_60h; | int64_t var_80h; | int64_t var_88h; | int64_t var_90h; | int64_t var_98h; | int64_t var_a0h; | int64_t var_b0h; | int64_t var_b8h; | int64_t var_beh; | int64_t var_c0h; | int64_t var_d8h; | int64_t var_e0h; | int64_t var_e8h; | uint32_t var_f0h; | rsi = arg2; | rdi = arg1; | /* BloombergLP::ball::RecordJsonFormatter::setFormat(std::__1::basic_string_view > const&) */ 0x00419530 push rbp | 0x00419531 push r15 | 0x00419533 push r14 | 0x00419535 push r13 | 0x00419537 push r12 | 0x00419539 push rbx | 0x0041953a sub rsp, 0xf8 | 0x00419541 cmp qword [rsi + 8], 0 | | if (*((rsi + 8)) != 0) { 0x00419546 je 0x419674 | 0x0041954c mov r15, rsi | r15 = rsi; 0x0041954f mov r14, rdi | r14 = rdi; 0x00419552 movabs rax, 0x2000000000000 | rax = 0x2000000000000; 0x0041955c mov qword [rsp + 0xb8], rax | *((rsp + 0xb8)) = rax; 0x00419564 mov rax, qword [rip + 0x2d45b5] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x0041956b test rax, rax | | if (rax == 0) { 0x0041956e jne 0x419575 | 0x00419570 call 0x472d60 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); | } 0x00419575 mov qword [rsp + 0xc0], rax | *((rsp + 0xc0)) = rax; 0x0041957d lea rdi, [rsp + 0x20] | 0x00419582 call 0x41d770 | BloombergLP::baljsn::DatumDecoderOptions::DatumDecoderOptions() (rsp + 0x20); 0x00419587 mov rbx, qword [r15] | rbx = *(r15); 0x0041958a mov rbp, qword [r15 + 8] | rbp = *((r15 + 8)); 0x0041958e lea rdi, [rsp + 0x40] | rdi = rsp + 0x40; 0x00419593 call 0x404890 | std::_1::basic_streambuf>::basic_streambuf() (); 0x00419598 mov qword [rsp + 0x40], 0x49ff70 | *((rsp + 0x40)) = sym.imp.std::__1::basic_streambuf_char__std::__1::char_traits_char___::basic_streambuf__; 0x004195a1 mov qword [rsp + 0x80], rbx | *((rsp + 0x80)) = rbx; 0x004195a9 mov qword [rsp + 0x88], rbp | *((rsp + 0x88)) = rbp; 0x004195b1 add rbp, rbx | rbp += rbx; 0x004195b4 mov qword [rsp + 0x50], rbx | *((rsp + 0x50)) = rbx; 0x004195b9 mov qword [rsp + 0x58], rbx | *((rsp + 0x58)) = rbx; 0x004195be mov qword [rsp + 0x60], rbp | *((rsp + 0x60)) = rbp; 0x004195c3 lea rdi, [rsp + 0xb0] | 0x004195cb lea rdx, [rsp + 0x40] | 0x004195d0 lea rcx, [rsp + 0x20] | 0x004195d5 xor esi, esi | 0x004195d7 call 0x41d890 | eax = BloombergLP::baljsn::DatumUtil::decode(BloombergLP::bdld::ManagedDatum*,std::_1::basic_ostream>*,std::_1::basic_streambuf>*,BloombergLP::baljsn::DatumDecoderOptionsconst&) (rsp + 0xb0, 0, rsp + 0x40, rsp + 0x20, r8, r9); 0x004195dc mov ebx, eax | ebx = eax; 0x004195de lea rdi, [rsp + 0x40] | rdi = rsp + 0x40; 0x004195e3 call 0x4045b0 | std::_1::basic_streambuf>::~basic_streambuf() (); 0x004195e8 lea rdi, [rsp + 0x20] | rdi = rsp + 0x20; 0x004195ed call 0x41d790 | BloombergLP::baljsn::DatumDecoderOptions::~DatumDecoderOptions() (); 0x004195f2 test ebx, ebx | | if (ebx != 0) { 0x004195f4 jne 0x419983 | goto label_2; | } 0x004195fa xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x004195fd movaps xmmword [rsp + 0x90], xmm0 | *((rsp + 0x90)) = xmm0; 0x00419605 mov r13, qword [r14 + 0x28] | r13 = *((r14 + 0x28)); 0x00419609 mov qword [rsp + 0xa0], r13 | *((rsp + 0xa0)) = r13; 0x00419611 movaps xmmword [rsp + 0x40], xmm0 | *((rsp + 0x40)) = xmm0; 0x00419616 mov qword [rsp + 0x50], 0 | *((rsp + 0x50)) = 0; 0x0041961f mov qword [rsp + 0x58], r13 | *((rsp + 0x58)) = r13; 0x00419624 movsx rax, word [rsp + 0xbe] | rax = *((rsp + 0xbe)); 0x0041962d mov ecx, eax | ecx = eax; 0x0041962f and ecx, 0xfffffffd | ecx &= 0xfffffffd; 0x00419632 mov dword [rsp + 0x1c], 0xffffffff | *((rsp + 0x1c)) = 0xffffffff; 0x0041963a cmp ecx, 0xd | | if (ecx != 0xd) { 0x0041963d jne 0x419905 | goto label_3; | } 0x00419643 mov qword [rsp + 0xe0], r15 | *((rsp + 0xe0)) = r15; 0x0041964b mov r12, qword [rsp + 0xb0] | r12 = *((rsp + 0xb0)); 0x00419653 cmp ax, 0xd | | if (ax != 0xd) { 0x00419657 jne 0x41967e | goto label_4; | } 0x00419659 test r12, r12 | | if (r12 == 0) { 0x0041965c je 0x4198c4 | goto label_5; | } 0x00419662 mov rcx, qword [r12] | rcx = *(r12); 0x00419666 add r12, 0x10 | r12 += 0x10; 0x0041966a test rcx, rcx | | if (rcx != 0) { 0x0041966d jne 0x41968f | goto label_6; | } 0x0041966f jmp 0x4198c4 | goto label_5; | } 0x00419674 mov ebx, 0xffffffff | ebx = 0xffffffff; 0x00419679 jmp 0x419998 | goto label_7; | label_4: 0x0041967e movsxd rcx, dword [rsp + 0xb8] | rcx = *((rsp + 0xb8)); 0x00419686 test rcx, rcx | | if (rcx == 0) { 0x00419689 je 0x4198c4 | goto label_5; | } | label_6: 0x0041968f mov qword [rsp + 0xd8], r14 | *((rsp + 0xd8)) = r14; 0x00419697 mov rax, rcx | rax = rcx; 0x0041969a neg rax | rax = -rax; 0x0041969d mov qword [rsp + 0xe8], rax | *((rsp + 0xe8)) = rax; 0x004196a5 mov al, 1 | al = 1; 0x004196a7 mov r14d, 1 | r14d = 1; 0x004196ad mov qword [rsp + 0xf0], rcx | *((rsp + 0xf0)) = rcx; 0x004196b5 jmp 0x4196e9 | | while (1) { | label_0: 0x004196c0 cmp r14, qword [rsp + 0xf0] | 0x004196c8 setb al | al = (r14 < *((rsp + 0xf0))) ? 1 : 0; 0x004196cb add r12, 0x10 | r12 += 0x10; 0x004196cf mov rcx, qword [rsp + 0xe8] | rcx = *((rsp + 0xe8)); 0x004196d7 lea rcx, [rcx + r14 + 1] | rcx = rcx + r14 + 1; 0x004196dc inc r14 | r14++; 0x004196df cmp rcx, 1 | | if (rcx == 1) { 0x004196e3 je 0x4198b8 | goto label_8; | } 0x004196e9 movsx rcx, word [r12 + 0xe] | rcx = *((r12 + 0xe)); 0x004196ef mov edx, 0x4030 | edx = 0x4030; 0x004196f4 bt rdx, rcx | | if (((rdx >> rcx) & 1) >= 0) { 0x004196f8 jb 0x4197b0 | 0x004196fe mov ecx, ecx | 0x00419700 add rcx, 0xffffffffffffffef | rcx += 0xffffffffffffffef; 0x00419704 cmp rcx, 1 | | if (rcx > 1) { 0x00419708 ja 0x4198b8 | goto label_8; | } 0x0041970e mov rbp, qword [r12] | rbp = *(r12); 0x00419712 test rbp, rbp | | if (rbp == 0) { 0x00419715 je 0x419880 | goto label_9; | } 0x0041971b cmp qword [rbp], 1 | | if (*(rbp) != 1) { 0x00419720 jne 0x419880 | goto label_9; | } 0x00419726 movsx rax, word [rbp + 0x3e] | rax = *((rbp + 0x3e)); 0x0041972b mov eax, eax | 0x0041972d add rax, 0xffffffffffffffef | rax += 0xffffffffffffffef; 0x00419731 cmp rax, 1 | | if (rax > 1) { 0x00419735 ja 0x419880 | goto label_9; | } 0x0041973b lea rsi, [rbp + 0x20] | 0x0041973f lea rdi, [rsp + 0x90] | 0x00419747 call 0x419ca0 | rax = BloombergLP::ball::(anonymousnamespace)::DatumParser::make(BloombergLP::bslstl::StringRefImpconst&) (rsp + 0x90, rbp + 0x20); 0x0041974c mov rbx, rax | rbx = rax; 0x0041974f mov r13, qword [rsp + 0xa0] | r13 = *((rsp + 0xa0)); 0x00419757 mov rax, r13 | rax = *((rsp + 0xa0)); 0x0041975a test rbx, rbx | | if (rbx == 0) { 0x0041975d cmove rax, rbx | rax = rbx; | } 0x00419761 mov qword [rsp + 0x38], rax | *((rsp + 0x38)) = rax; 0x00419766 mov r15d, 0x41c4d0 | r15d = BloombergLP::bslma::ManagedPtr_FactoryDeleter::deleter(void*, void*); | if (rbx == 0) { 0x0041976c cmove r15, rbx | r15 = rbx; | } | if (rbx == 0) { 0x00419770 je 0x419880 | goto label_9; | } 0x00419776 mov rsi, qword [rbp + 0x30] | rsi = *((rbp + 0x30)); 0x0041977a test rsi, rsi | | if (rsi == 0) { 0x0041977d je 0x419830 | goto label_10; | } 0x00419783 lea rdi, [rsi + 0x20] | rdi = rsi + 0x20; 0x00419787 mov rcx, qword [rsi] | rcx = *(rsi); 0x0041978a movzx edx, byte [rsi + 8] | edx = *((rsi + 8)); 0x0041978e cmp byte [rsi + 9], 0 | 0x00419792 setne al | al = (*((rsi + 9)) != 0) ? 1 : 0; 0x00419795 test rcx, rcx | 0x00419798 setne sil | sil = (rcx != 0) ? 1 : 0; 0x0041979c and sil, al | sil &= al; 0x0041979f jmp 0x419838 | goto label_11; | } 0x004197b0 cmp ecx, 0xe | | if (ecx != 0xe) { 0x004197b3 je 0x4197e0 | 0x004197b5 cmp ecx, 5 | | if (ecx != 5) { 0x004197b8 je 0x4197e0 | 0x004197ba mov eax, 0 | eax = 0; 0x004197bf mov edx, 0 | edx = 0; 0x004197c4 cmp ecx, 4 | | if (ecx != 4) { 0x004197c7 jne 0x4197e9 | goto label_12; | } 0x004197c9 lea rax, [r12 + 1] | rax = r12 + 1; 0x004197ce movsx rdx, byte [r12] | rdx = *(r12); 0x004197d3 jmp 0x4197e9 | | } | } else { 0x004197e0 mov rax, qword [r12] | rax = *(r12); 0x004197e4 movsxd rdx, dword [r12 + 8] | rdx = *((r12 + 8)); | } | label_12: 0x004197e9 mov qword [rsp + 0x20], rax | *((rsp + 0x20)) = rax; 0x004197ee mov qword [rsp + 0x28], rdx | *((rsp + 0x28)) = rdx; 0x004197f3 lea rdi, [rsp + 0x90] | 0x004197fb lea rsi, [rsp + 0x20] | 0x00419800 call 0x419ca0 | rax = BloombergLP::ball::(anonymousnamespace)::DatumParser::make(BloombergLP::bslstl::StringRefImpconst&) (rsp + 0x90, rsp + 0x20); 0x00419805 mov rbx, rax | rbx = rax; 0x00419808 mov r13, qword [rsp + 0xa0] | r13 = *((rsp + 0xa0)); 0x00419810 test rax, rax | 0x00419813 mov rbp, r13 | | if (rax == 0) { 0x00419816 cmove rbp, rax | | } 0x0041981a mov r15, rax | r15 = rax; 0x0041981d mov eax, 0x41c4d0 | eax = BloombergLP::bslma::ManagedPtr_FactoryDeleter::deleter(void*, void*); | if (rax != 0) { 0x00419822 cmovne r15, rax | r15 = rax; | } 0x00419826 test rbx, rbx | | if (rbx != 0) { 0x00419829 jne 0x41989f | goto label_13; | } 0x0041982b jmp 0x4196c0 | | } | label_10: 0x00419830 xor edi, edi | edi = 0; 0x00419832 xor ecx, ecx | ecx = 0; 0x00419834 xor edx, edx | edx = 0; 0x00419836 xor esi, esi | esi = 0; | label_11: 0x00419838 mov qword [rsp + 0x20], rdi | *((rsp + 0x20)) = rdi; 0x0041983d mov qword [rsp + 0x28], rcx | *((rsp + 0x28)) = rcx; 0x00419842 mov byte [rsp + 0x30], dl | *((rsp + 0x30)) = dl; 0x00419846 mov byte [rsp + 0x31], sil | *((rsp + 0x31)) = sil; 0x0041984b mov rax, qword [rbx] | rax = *(rbx); 0x0041984e mov rax, qword [rax + 0x18] | rax = *((rax + 0x18)); 0x00419852 mov rcx, qword [rsp + 0x30] | rcx = *((rsp + 0x30)); 0x00419857 mov qword [rsp + 0x10], rcx | *((rsp + 0x10)) = rcx; 0x0041985c movups xmm0, xmmword [rsp + 0x20] | __asm ("movups xmm0, xmmword [rsp + 0x20]"); 0x00419861 movups xmmword [rsp], xmm0 | __asm ("movups xmmword [rsp], xmm0"); 0x00419865 mov rdi, rbx | rdi = rbx; 0x00419868 call rax | eax = void (*rax)() (); 0x0041986a test eax, eax | | if (eax != 0) { 0x0041986c je 0x419882 | 0x0041986e mov rdi, rbx | rdi = rbx; 0x00419871 mov rsi, qword [rsp + 0x38] | rsi = *((rsp + 0x38)); 0x00419876 call r15 | rax = void (*r15)() (); 0x00419879 nop dword [rax] | | label_9: 0x00419880 xor ebx, ebx | ebx = 0; | } 0x00419882 test rbx, rbx | 0x00419885 mov rbp, r13 | | if (rbx == 0) { 0x00419888 cmove rbp, rbx | | } 0x0041988c mov r15d, 0x41c4d0 | r15d = BloombergLP::bslma::ManagedPtr_FactoryDeleter::deleter(void*, void*); | if (rbx == 0) { 0x00419892 cmove r15, rbx | r15 = rbx; | } 0x00419896 test rbx, rbx | | if (rbx == 0) { 0x00419899 je 0x4196c0 | goto label_0; | } | label_13: 0x0041989f mov qword [rsp + 0x20], rbx | *((rsp + 0x20)) = rbx; 0x004198a4 lea rdi, [rsp + 0x40] | 0x004198a9 lea rsi, [rsp + 0x20] | 0x004198ae call 0x41d3b0 | al = unsigned long&bsl::vector>::emplace_back(unsigned long&&) (rsp + 0x40, rsp + 0x20); 0x004198b3 jmp 0x4196c0 | goto label_0; | label_8: 0x004198b8 test al, 1 | 0x004198ba mov r14, qword [rsp + 0xd8] | r14 = *((rsp + 0xd8)); | if ((al & 1) == 0) { 0x004198c2 jne 0x419905 | | label_5: 0x004198c4 mov rax, qword [rsp + 0xe0] | rax = *((rsp + 0xe0)); 0x004198cc mov rsi, qword [rax] | 0x004198cf mov rdx, qword [rax + 8] | 0x004198d3 mov rbx, qword [r14 + 0x18] | rbx = *((r14 + 0x18)); 0x004198d7 mov qword [r14 + 0x18], 0 | *((r14 + 0x18)) = 0; 0x004198df mov ecx, 0x49bea4 | 0x004198e4 mov rdi, r14 | 0x004198e7 call 0x476e40 | bsl::basic_string,bsl::allocator>::privateAppend(char const*,unsigned long,char const*) (r14, *(rax), *((rax + 8)), "string<>::operator=(basic_string_view&): string too long"); 0x004198ec add r14, 0x30 | r14 += 0x30; 0x004198f0 mov dword [rsp + 0x1c], 0 | *((rsp + 0x1c)) = 0; 0x004198f8 lea rsi, [rsp + 0x40] | 0x004198fd mov rdi, r14 | 0x00419900 call 0x48ccc0 | bsl::vector>::swap(bsl::vector>&) (r14, rsp + 0x40); | } | label_3: 0x00419905 mov rbx, qword [rsp + 0x40] | rbx = *((rsp + 0x40)); 0x0041990a mov rcx, qword [rsp + 0x48] | rcx = *((rsp + 0x48)); 0x0041990f cmp rbx, rcx | | if (rbx != rcx) { 0x00419912 jne 0x41992e | goto label_14; | } 0x00419914 test rbx, rbx | | if (rbx != 0) { 0x00419917 jne 0x41995f | goto label_15; | } 0x00419919 jmp 0x41996d | goto label_16; | label_1: 0x00419920 mov rcx, qword [rsp + 0x48] | rcx = *((rsp + 0x48)); | do { 0x00419925 add rbx, 8 | rbx += 8; 0x00419929 cmp rbx, rcx | | if (rbx == rcx) { 0x0041992c je 0x419955 | goto label_17; | } | label_14: 0x0041992e mov rdi, qword [rbx] | rdi = *(rbx); 0x00419931 test rdi, rdi | 0x00419934 je 0x419925 | | } while (rdi == 0); 0x00419936 mov r14, qword [rsp + 0x58] | r14 = *((rsp + 0x58)); 0x0041993b mov rax, qword [rdi] | rax = *(rdi); 0x0041993e mov rbp, qword [rax - 0x10] | rbp = *((rax - 0x10)); 0x00419942 add rbp, rdi | rbp += rdi; 0x00419945 call qword [rax] | uint64_t (*rax)() (); 0x00419947 mov rax, qword [r14] | rax = *(r14); 0x0041994a mov rdi, r14 | rdi = r14; 0x0041994d mov rsi, rbp | rsi = rbp; 0x00419950 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00419953 jmp 0x419920 | goto label_1; | label_17: 0x00419955 mov rbx, qword [rsp + 0x40] | rbx = *((rsp + 0x40)); 0x0041995a test rbx, rbx | | if (rbx != 0) { 0x0041995d je 0x41996d | | label_15: 0x0041995f mov rdi, qword [rsp + 0x58] | rdi = *((rsp + 0x58)); 0x00419964 mov rax, qword [rdi] | rax = *(rdi); 0x00419967 mov rsi, rbx | rsi = rbx; 0x0041996a call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } | label_16: 0x0041996d mov rdi, qword [rsp + 0x98] | rdi = *((rsp + 0x98)); 0x00419975 test rdi, rdi | 0x00419978 mov ebx, dword [rsp + 0x1c] | ebx = *((rsp + 0x1c)); | if (rdi != 0) { 0x0041997c je 0x419983 | 0x0041997e call 0x473680 | BloombergLP::bslma::SharedPtrRep::releaseRef() (rdi); | } | label_2: 0x00419983 mov rsi, qword [rsp + 0xc0] | 0x0041998b lea rdi, [rsp + 0xb0] | 0x00419993 call 0x42b660 | BloombergLP::bdld::Datum::destroy(BloombergLP::bdld::Datumconst&,BloombergLP::bslma::Allocator*) (rsp + 0xb0, *((rsp + 0xc0))); | label_7: 0x00419998 mov eax, ebx | eax = ebx; 0x0041999a add rsp, 0xf8 | 0x004199a1 pop rbx | 0x004199a2 pop r12 | 0x004199a4 pop r13 | 0x004199a6 pop r14 | 0x004199a8 pop r15 | 0x004199aa pop rbp | 0x004199ab ret | return rax; | }