; assembly | /* r2dec pseudo code output */ | /* balm_metricsample.t/none @ 0x404640 */ | #include | ; (fcn) sym.gg_bsl::vector_BloombergLP::balm::MetricSampleGroup__bsl::allocator_BloombergLP::balm::MetricSampleGroup_____char_const__bsl::vector_BloombergLP::balm::MetricRecord__bsl::allocator_BloombergLP::balm::MetricRecord____const_ () | int64_t gg_bsl::vector_BloombergLP::balm::MetricSampleGroup_bsl::allocator_BloombergLP::balm::MetricSampleGroup_char_const_bsl::vector_BloombergLP::balm::MetricRecord_bsl::allocator_BloombergLP::balm::MetricRecord_const_ (int64_t arg3, int64_t arg2, char * arg1) { | int64_t var_8h; | int64_t var_10h; | int64_t var_18h; | int64_t var_24h; | char * s; | int64_t var_30h; | int64_t var_38h; | char * var_40h; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* gg(bsl::vector >*, char const*, bsl::vector > const&) */ 0x00404640 push rbp | 0x00404641 push r15 | 0x00404643 push r14 | 0x00404645 push r13 | 0x00404647 push r12 | 0x00404649 push rbx | 0x0040464a sub rsp, 0x48 | 0x0040464e mov r14, rsi | r14 = rsi; 0x00404651 mov qword [rsp + 0x40], rdi | *((rsp + 0x40)) = rdi; 0x00404656 mov sil, byte [rsi] | sil = *(rsi); 0x00404659 test sil, sil | | if (sil == 0) { 0x0040465c je 0x404acc | goto label_1; | } 0x00404662 mov qword [rsp + 0x38], rdx | *((rsp + 0x38)) = rdx; 0x00404667 mov r13, qword [rdx] | r13 = *(rdx); 0x0040466a xor eax, eax | eax = 0; 0x0040466c mov r12, r14 | r12 = r14; 0x0040466f mov qword [rsp + 0x30], r13 | *((rsp + 0x30)) = r13; 0x00404674 mov qword [rsp + 0x28], r14 | *((rsp + 0x28)) = r14; 0x00404679 jmp 0x4046f8 | | while (al < 0xa) { | label_0: 0x00404680 add r15, 0xffffffffffffffd0 | r15 += 0xffffffffffffffd0; 0x00404684 mov rcx, qword [rsp + 0x38] | rcx = *((rsp + 0x38)); 0x00404689 mov rax, qword [rcx + 8] | rax = *((rcx + 8)); 0x0040468d sub rax, qword [rcx] | rax -= *(rcx); 0x00404690 add r14, 0xffffffffffffffd0 | r14 += 0xffffffffffffffd0; 0x00404694 mov rdx, qword [rsp + 0x30] | rdx = *((rsp + 0x30)); 0x00404699 add rax, rdx | rax += rdx; 0x0040469c mov rcx, r15 | rcx = r15; 0x0040469f shl rcx, 3 | rcx <<= 3; 0x004046a3 lea rbx, [rcx + rcx*4] | rbx = rcx * 5; 0x004046a7 lea rcx, [r13 + rbx] | rcx = r13 + rbx; 0x004046ac cmp rax, rcx | | if (rax < rcx) { 0x004046af cmovb r13, rdx | r13 = rdx; | } 0x004046b3 mov qword [rsp], r13 | *(rsp) = r13; 0x004046b7 mov dword [rsp + 8], r15d | *((rsp + 8)) = r15d; 0x004046bc mov qword [rsp + 0x10], r14 | *((rsp + 0x10)) = r14; 0x004046c1 mov dword [rsp + 0x18], 0 | *((rsp + 0x18)) = 0; 0x004046c9 mov rdi, qword [rsp + 0x40] | 0x004046ce mov rsi, rsp | 0x004046d1 call 0x4118d0 | bsl::vector>::push_back(BloombergLP::balm::MetricSampleGroup&&) (*((rsp + 0x40)), rsp); 0x004046d6 add r13, rbx | r13 += rbx; 0x004046d9 mov eax, dword [rsp + 0x24] | eax = *((rsp + 0x24)); 0x004046dd add eax, r15d | eax += r15d; 0x004046e0 movzx esi, byte [r12 + 4] | esi = *((r12 + 4)); 0x004046e6 add r12, 4 | r12 += 4; 0x004046ea test sil, sil | 0x004046ed mov r14, qword [rsp + 0x28] | r14 = *((rsp + 0x28)); | if (sil == 0) { 0x004046f2 je 0x404ace | goto label_2; | } 0x004046f8 mov dword [rsp + 0x24], eax | *((rsp + 0x24)) = eax; 0x004046fc lea ecx, [rsi + 3] | ecx = rsi + 3; 0x004046ff cmp cl, 2 | | if (cl >= 2) { 0x00404702 jb 0x404720 | 0x00404704 cmp byte [r12 + 1], 0 | | if (*((r12 + 1)) != 0) { 0x0040470a je 0x404720 | 0x0040470c cmp sil, 0x52 | | if (sil != 0x52) { 0x00404710 jne 0x4047ae | goto label_3; | } 0x00404716 jmp 0x404867 | | } | } else { 0x00404720 mov edi, 0x672c28 | 0x00404725 mov esi, 0x43f7cf | 0x0040472a mov edx, 0x27 | 0x0040472f call 0x412a80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (obj.std::__1::cout, "Invalid termination for specification: ", 0x27); 0x00404734 mov rbx, rax | rbx = rax; 0x00404737 mov rdi, r14 | 0x0040473a call 0x403de0 | rax = strlen (r14); 0x0040473f mov rdi, rbx | 0x00404742 mov rsi, r14 | 0x00404745 mov rdx, rax | 0x00404748 call 0x412a80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rbx, r14, rax); 0x0040474d mov rbx, rax | rbx = rax; 0x00404750 mov rax, qword [rax] | rax = *(rax); 0x00404753 mov rsi, qword [rax - 0x18] | rsi = *((rax - 0x18)); 0x00404757 add rsi, rbx | rsi += rbx; 0x0040475a mov rbp, rsp | 0x0040475d mov rdi, rbp | rdi = rsp; 0x00404760 call 0x404050 | std::_1::ios_base::getloc()const (); 0x00404765 mov esi, 0x672b70 | esi = obj.std::__1::ctype_char_::id; 0x0040476a mov rdi, rbp | rdi = rbp; 0x0040476d call 0x4040e0 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00404772 mov rcx, qword [rax] | rcx = *(rax); 0x00404775 mov rdi, rax | rdi = rax; 0x00404778 mov esi, 0xa | esi = 0xa; 0x0040477d call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x00404780 mov r15d, eax | r15d = eax; 0x00404783 mov rdi, rsp | rdi = rsp; 0x00404786 call 0x404160 | std::_1::locale::~locale() (); 0x0040478b movsx esi, r15b | esi = (int32_t) r15b; 0x0040478f mov rdi, rbx | rdi = rbx; 0x00404792 call 0x403e80 | std::_1::basic_ostream>::put(char) (); 0x00404797 mov rdi, rbx | rdi = rbx; 0x0040479a call 0x404010 | std::_1::basic_ostream>::flush() (); 0x0040479f movzx esi, byte [r12] | esi = *(r12); 0x004047a4 cmp sil, 0x52 | | if (sil == 0x52) { 0x004047a8 je 0x404867 | goto label_4; | } | label_3: 0x004047ae mov edi, 0x672c28 | 0x004047b3 mov esi, 0x43f7f7 | 0x004047b8 mov edx, 0x22 | 0x004047bd call 0x412a80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (obj.std::__1::cout, "Unexpected char in specification: ", 0x22); 0x004047c2 mov rbx, rax | rbx = rax; 0x004047c5 mov rdi, r14 | 0x004047c8 call 0x403de0 | rax = strlen (r14); 0x004047cd mov rdi, rbx | 0x004047d0 mov rsi, r14 | 0x004047d3 mov rdx, rax | 0x004047d6 call 0x412a80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rbx, r14, rax); 0x004047db mov esi, 0x43f81a | 0x004047e0 mov edx, 0x1b | 0x004047e5 mov rdi, rax | 0x004047e8 call 0x412a80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, " expecting: 'R' found: ', 0x1b); 0x004047ed movzx ecx, byte [r12] | ecx = *(r12); 0x004047f2 mov byte [rsp], cl | *(rsp) = cl; 0x004047f5 mov edx, 1 | 0x004047fa mov rdi, rax | 0x004047fd mov rbx, rsp | rbx = rsp; 0x00404800 mov rsi, rbx | 0x00404803 call 0x412a80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, rsp, 1); 0x00404808 mov esi, 0x43f87d | 0x0040480d mov edx, 1 | 0x00404812 mov rdi, rax | 0x00404815 call 0x412a80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, 0x43f87d, 1); 0x0040481a mov rbp, rax | 0x0040481d mov rax, qword [rax] | rax = *(rax); 0x00404820 mov rsi, qword [rax - 0x18] | rsi = *((rax - 0x18)); 0x00404824 add rsi, rbp | rsi += rbp; 0x00404827 mov rdi, rbx | rdi = rbx; 0x0040482a call 0x404050 | std::_1::ios_base::getloc()const (); 0x0040482f mov esi, 0x672b70 | esi = obj.std::__1::ctype_char_::id; 0x00404834 mov rdi, rbx | rdi = rbx; 0x00404837 call 0x4040e0 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x0040483c mov rcx, qword [rax] | rcx = *(rax); 0x0040483f mov rdi, rax | rdi = rax; 0x00404842 mov esi, 0xa | esi = 0xa; 0x00404847 call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x0040484a mov ebx, eax | ebx = eax; 0x0040484c mov rdi, rsp | rdi = rsp; 0x0040484f call 0x404160 | std::_1::locale::~locale() (); 0x00404854 movsx esi, bl | esi = (int32_t) bl; 0x00404857 mov rdi, rbp | rdi = rbp; 0x0040485a call 0x403e80 | std::_1::basic_ostream>::put(char) (); 0x0040485f mov rdi, rbp | rdi = rbp; 0x00404862 call 0x404010 | std::_1::basic_ostream>::flush() (); | } | label_4: 0x00404867 movsx r15, byte [r12 + 1] | r15 = *((r12 + 1)); 0x0040486d lea eax, [r15 - 0x30] | eax = r15 - 0x30; 0x00404871 cmp al, 0xa | | if (al >= 0xa) { 0x00404873 jb 0x404932 | 0x00404879 mov edi, 0x672c28 | 0x0040487e mov esi, 0x43f836 | 0x00404883 mov edx, 0x2c | 0x00404888 call 0x412a80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (obj.std::__1::cout, "Invalid number of records in specification: ", 0x2c); 0x0040488d mov rbx, rax | rbx = rax; 0x00404890 mov rdi, r14 | 0x00404893 call 0x403de0 | rax = strlen (r14); 0x00404898 mov rdi, rbx | 0x0040489b mov rsi, r14 | 0x0040489e mov rdx, rax | 0x004048a1 call 0x412a80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rbx, r14, rax); 0x004048a6 mov esi, 0x43f874 | 0x004048ab mov edx, 0xa | 0x004048b0 mov rdi, rax | 0x004048b3 call 0x412a80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, 0x43f874, 0xa); 0x004048b8 movzx ecx, byte [r12] | ecx = *(r12); 0x004048bd mov byte [rsp], cl | *(rsp) = cl; 0x004048c0 mov edx, 1 | 0x004048c5 mov rdi, rax | 0x004048c8 mov rbx, rsp | rbx = rsp; 0x004048cb mov rsi, rbx | 0x004048ce call 0x412a80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, rsp, 1); 0x004048d3 mov esi, 0x43f87d | 0x004048d8 mov edx, 1 | 0x004048dd mov rdi, rax | 0x004048e0 call 0x412a80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, 0x43f87d, 1); 0x004048e5 mov rbp, rax | 0x004048e8 mov rax, qword [rax] | rax = *(rax); 0x004048eb mov rsi, qword [rax - 0x18] | rsi = *((rax - 0x18)); 0x004048ef add rsi, rbp | rsi += rbp; 0x004048f2 mov rdi, rbx | rdi = rbx; 0x004048f5 call 0x404050 | std::_1::ios_base::getloc()const (); 0x004048fa mov esi, 0x672b70 | esi = obj.std::__1::ctype_char_::id; 0x004048ff mov rdi, rbx | rdi = rbx; 0x00404902 call 0x4040e0 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00404907 mov rcx, qword [rax] | rcx = *(rax); 0x0040490a mov rdi, rax | rdi = rax; 0x0040490d mov esi, 0xa | esi = 0xa; 0x00404912 call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x00404915 mov ebx, eax | ebx = eax; 0x00404917 mov rdi, rsp | rdi = rsp; 0x0040491a call 0x404160 | std::_1::locale::~locale() (); 0x0040491f movsx esi, bl | esi = (int32_t) bl; 0x00404922 mov rdi, rbp | rdi = rbp; 0x00404925 call 0x403e80 | std::_1::basic_ostream>::put(char) (); 0x0040492a mov rdi, rbp | rdi = rbp; 0x0040492d call 0x404010 | std::_1::basic_ostream>::flush() (); | } 0x00404932 cmp byte [r12 + 2], 0x45 | | if (*((r12 + 2)) != 0x45) { 0x00404938 je 0x4049f7 | 0x0040493e mov edi, 0x672c28 | 0x00404943 mov esi, 0x43f7f7 | 0x00404948 mov edx, 0x22 | 0x0040494d call 0x412a80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (obj.std::__1::cout, "Unexpected char in specification: ", 0x22); 0x00404952 mov rbx, rax | rbx = rax; 0x00404955 mov rdi, r14 | 0x00404958 call 0x403de0 | rax = strlen (r14); 0x0040495d mov rdi, rbx | 0x00404960 mov rsi, r14 | 0x00404963 mov rdx, rax | 0x00404966 call 0x412a80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rbx, r14, rax); 0x0040496b mov esi, 0x43f863 | 0x00404970 mov edx, 0x1b | 0x00404975 mov rdi, rax | 0x00404978 call 0x412a80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, " expecting: 'E' found: ', 0x1b); 0x0040497d movzx ecx, byte [r12] | ecx = *(r12); 0x00404982 mov byte [rsp], cl | *(rsp) = cl; 0x00404985 mov edx, 1 | 0x0040498a mov rdi, rax | 0x0040498d mov rbx, rsp | rbx = rsp; 0x00404990 mov rsi, rbx | 0x00404993 call 0x412a80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, rsp, 1); 0x00404998 mov esi, 0x43f87d | 0x0040499d mov edx, 1 | 0x004049a2 mov rdi, rax | 0x004049a5 call 0x412a80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, 0x43f87d, 1); 0x004049aa mov rbp, rax | 0x004049ad mov rax, qword [rax] | rax = *(rax); 0x004049b0 mov rsi, qword [rax - 0x18] | rsi = *((rax - 0x18)); 0x004049b4 add rsi, rbp | rsi += rbp; 0x004049b7 mov rdi, rbx | rdi = rbx; 0x004049ba call 0x404050 | std::_1::ios_base::getloc()const (); 0x004049bf mov esi, 0x672b70 | esi = obj.std::__1::ctype_char_::id; 0x004049c4 mov rdi, rbx | rdi = rbx; 0x004049c7 call 0x4040e0 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x004049cc mov rcx, qword [rax] | rcx = *(rax); 0x004049cf mov rdi, rax | rdi = rax; 0x004049d2 mov esi, 0xa | esi = 0xa; 0x004049d7 call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x004049da mov ebx, eax | ebx = eax; 0x004049dc mov rdi, rsp | rdi = rsp; 0x004049df call 0x404160 | std::_1::locale::~locale() (); 0x004049e4 movsx esi, bl | esi = (int32_t) bl; 0x004049e7 mov rdi, rbp | rdi = rbp; 0x004049ea call 0x403e80 | std::_1::basic_ostream>::put(char) (); 0x004049ef mov rdi, rbp | rdi = rbp; 0x004049f2 call 0x404010 | std::_1::basic_ostream>::flush() (); | } 0x004049f7 movsx r14, byte [r12 + 3] | r14 = *((r12 + 3)); 0x004049fd lea eax, [r14 - 0x30] | eax = r14 - 0x30; 0x00404a01 cmp al, 0xa | 0x00404a03 jb 0x404680 | | } 0x00404a09 mov edi, 0x672c28 | 0x00404a0e mov esi, 0x43f87f | 0x00404a13 mov edx, 0x27 | 0x00404a18 call 0x412a80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (obj.std::__1::cout, "Invalid elapsed time in specification: ", 0x27); 0x00404a1d mov rbx, rax | rbx = rax; 0x00404a20 mov rbp, qword [rsp + 0x28] | rbp = *((rsp + 0x28)); 0x00404a25 mov rdi, rbp | 0x00404a28 call 0x403de0 | rax = strlen (*((rsp + 0x28))); 0x00404a2d mov rdi, rbx | 0x00404a30 mov rsi, rbp | 0x00404a33 mov rdx, rax | 0x00404a36 call 0x412a80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rbx, rbp, rax); 0x00404a3b mov esi, 0x43f874 | 0x00404a40 mov edx, 0xa | 0x00404a45 mov rdi, rax | 0x00404a48 call 0x412a80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, 0x43f874, 0xa); 0x00404a4d movzx ecx, byte [r12] | ecx = *(r12); 0x00404a52 mov byte [rsp], cl | *(rsp) = cl; 0x00404a55 mov edx, 1 | 0x00404a5a mov rdi, rax | 0x00404a5d mov rbx, rsp | rbx = rsp; 0x00404a60 mov rsi, rbx | 0x00404a63 call 0x412a80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, rsp, 1); 0x00404a68 mov esi, 0x43f87d | 0x00404a6d mov edx, 1 | 0x00404a72 mov rdi, rax | 0x00404a75 call 0x412a80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, 0x43f87d, 1); 0x00404a7a mov rbp, rax | 0x00404a7d mov rax, qword [rax] | rax = *(rax); 0x00404a80 mov rsi, qword [rax - 0x18] | rsi = *((rax - 0x18)); 0x00404a84 add rsi, rbp | rsi += rbp; 0x00404a87 mov rdi, rbx | rdi = rbx; 0x00404a8a call 0x404050 | std::_1::ios_base::getloc()const (); 0x00404a8f mov esi, 0x672b70 | esi = obj.std::__1::ctype_char_::id; 0x00404a94 mov rdi, rbx | rdi = rbx; 0x00404a97 call 0x4040e0 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00404a9c mov rcx, qword [rax] | rcx = *(rax); 0x00404a9f mov rdi, rax | rdi = rax; 0x00404aa2 mov esi, 0xa | esi = 0xa; 0x00404aa7 call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x00404aaa mov ebx, eax | ebx = eax; 0x00404aac mov rdi, rsp | rdi = rsp; 0x00404aaf call 0x404160 | std::_1::locale::~locale() (); 0x00404ab4 movsx esi, bl | esi = (int32_t) bl; 0x00404ab7 mov rdi, rbp | rdi = rbp; 0x00404aba call 0x403e80 | std::_1::basic_ostream>::put(char) (); 0x00404abf mov rdi, rbp | rdi = rbp; 0x00404ac2 call 0x404010 | eax = std::_1::basic_ostream>::flush() (); 0x00404ac7 jmp 0x404680 | goto label_0; | label_1: 0x00404acc xor eax, eax | eax = 0; | label_2: 0x00404ace add rsp, 0x48 | 0x00404ad2 pop rbx | 0x00404ad3 pop r12 | 0x00404ad5 pop r13 | 0x00404ad7 pop r14 | 0x00404ad9 pop r15 | 0x00404adb pop rbp | 0x00404adc ret | return rax; | }