; assembly | /* r2dec pseudo code output */ | /* balxml_encoder.t/assume @ 0x4e72b0 */ | #include | ; (fcn) method.BloombergLP::balxml::Formatter.doAddData_std::__1::basic_string_view_char__std::__1::char_traits_char____const__bool_ () | int64_t method_BloombergLP::balxml::Formatter_doAddData_std::_1::basic_string_view_char_std::_1::char_traits_char_const_bool_ (int64_t arg3, int64_t arg2, signed int64_t arg1) { | int64_t var_2h; | int64_t var_3h; | int64_t var_4h; | int64_t var_5h; | int64_t var_6h; | int64_t var_7h; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::balxml::Formatter::doAddData(std::__1::basic_string_view > const&, bool) */ 0x004e72b0 push rbp | 0x004e72b1 push r15 | 0x004e72b3 push r14 | 0x004e72b5 push rbx | 0x004e72b6 push rax | 0x004e72b7 mov r14, rsi | r14 = rsi; 0x004e72ba mov rbx, rdi | rbx = rdi; 0x004e72bd mov r15d, dword [rsi + 8] | r15d = *((rsi + 8)); 0x004e72c1 cmp dword [rdi + 0xb4], 0 | | if (*((rdi + 0xb4)) >= 0) { 0x004e72c8 js 0x4e74d8 | 0x004e72ce mov ebp, edx | 0x004e72d0 cmp byte [rbx + 0xdc], 0 | | if (*((rbx + 0xdc)) != 0) { 0x004e72d7 je 0x4e7314 | 0x004e72d9 cmp dword [rbx + 0xb0], 0 | | if (*((rbx + 0xb0)) <= 0) { 0x004e72e0 jle 0x4e7314 | goto label_0; | } 0x004e72e2 mov rax, qword [rbx + 0xc0] | rax = *((rbx + 0xc0)); 0x004e72e9 cmp dword [rax - 4], 3 | | if (*((rax - 4)) != 3) { 0x004e72ed jne 0x4e7314 | goto label_0; | } 0x004e72ef mov rdi, qword [rbx + 0xa0] | 0x004e72f6 mov byte [rsp + 4], 0xa | *((rsp + 4)) = 0xa; 0x004e72fb lea rsi, [rsp + 4] | 0x004e7300 mov edx, 1 | 0x004e7305 call 0x4521a0 | std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (*((rbx + 0xa0)), rsp + 4, 1); 0x004e730a mov dword [rbx + 0xb0], 0 | *((rbx + 0xb0)) = 0; | } | label_0: 0x004e7314 test r15d, r15d | | if (r15d == 0) { 0x004e7317 je 0x4e74fb | goto label_1; | } 0x004e731d mov rax, qword [rbx + 0xc0] | rax = *((rbx + 0xc0)); 0x004e7324 mov ecx, dword [rax - 4] | ecx = *((rax - 4)); 0x004e7327 test ecx, ecx | | if (ecx != 0) { 0x004e7329 je 0x4e73cb | 0x004e732f test bpl, bpl | | if (bpl != 0) { 0x004e7332 je 0x4e73cb | 0x004e7338 mov edx, dword [rbx + 0xb0] | edx = *((rbx + 0xb0)); 0x004e733e mov esi, dword [rbx + 0xb4] | esi = *((rbx + 0xb4)); 0x004e7344 test edx, edx | | if (edx != 0) { 0x004e7346 je 0x4e7354 | 0x004e7348 lea edi, [rdx + r15] | edi = rdx + r15; 0x004e734c cmp edi, esi | | if (edi < esi) { 0x004e734e jl 0x4e74ae | goto label_2; | } | } 0x004e7354 cmp ecx, 1 | | if (ecx != 1) { 0x004e7357 jne 0x4e744b | goto label_3; | } 0x004e735d test edx, edx | | if (edx <= 0) { 0x004e735f jle 0x4e744b | goto label_3; | } 0x004e7365 test esi, esi | | if (esi < 0) { 0x004e7367 js 0x4e74a0 | goto label_4; | } 0x004e736d cmp dword [rbx + 0xd8], 2 | | if (*((rbx + 0xd8)) == 2) { 0x004e7374 jne 0x4e73a1 | 0x004e7376 mov rdi, qword [rbx + 0xa0] | 0x004e737d mov byte [rsp + 5], 0x3e | *((rsp + 5)) = 0x3e; 0x004e7382 lea rsi, [rsp + 5] | 0x004e7387 mov edx, 1 | 0x004e738c call 0x4521a0 | std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (*((rbx + 0xa0)), rsp + 5, 1); 0x004e7391 inc dword [rbx + 0xb0] | *((rbx + 0xb0))++; 0x004e7397 mov dword [rbx + 0xd8], 3 | *((rbx + 0xd8)) = 3; | } 0x004e73a1 mov rdi, qword [rbx + 0xa0] | 0x004e73a8 mov byte [rsp + 6], 0xa | *((rsp + 6)) = 0xa; 0x004e73ad lea rsi, [rsp + 6] | 0x004e73b2 mov edx, 1 | 0x004e73b7 call 0x4521a0 | std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (*((rbx + 0xa0)), rsp + 6, 1); 0x004e73bc mov dword [rbx + 0xb0], 0 | *((rbx + 0xb0)) = 0; 0x004e73c6 jmp 0x4e74a7 | | } | } else { 0x004e73cb test bpl, bpl | | if (bpl != 0) { 0x004e73ce jne 0x4e74ae | goto label_2; | } 0x004e73d4 cmp ecx, 3 | | if (ecx != 3) { 0x004e73d7 jne 0x4e74d8 | goto label_5; | } 0x004e73dd cmp byte [rbx + 0xdc], 0 | | if (*((rbx + 0xdc)) == 0) { 0x004e73e4 je 0x4e74d8 | goto label_5; | } 0x004e73ea cmp dword [rbx + 0xb4], 0 | | if (*((rbx + 0xb4)) < 0) { 0x004e73f1 js 0x4e74d8 | goto label_5; | } 0x004e73f7 cmp dword [rbx + 0xb0], 0 | | if (*((rbx + 0xb0)) != 0) { 0x004e73fe je 0x4e741b | 0x004e7400 mov rdi, qword [rbx + 0xa0] | 0x004e7407 mov byte [rsp + 3], 0xa | *((rsp + 3)) = 0xa; 0x004e740c lea rsi, [rsp + 3] | 0x004e7411 mov edx, 1 | 0x004e7416 call 0x4521a0 | std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (*((rbx + 0xa0)), rsp + 3, 1); | } 0x004e741b mov rdi, qword [rbx + 0xa0] | 0x004e7422 mov esi, dword [rbx + 0xa8] | 0x004e7428 mov edx, dword [rbx + 0xac] | edx = *((rbx + 0xac)); 0x004e742e call 0x4efc90 | BloombergLP::bdlb::Print::indent(std::_1::basic_ostream>&,int,int) (*((rbx + 0xa0)), *((rbx + 0xa8))); 0x004e7433 mov eax, dword [rbx + 0xac] | eax = *((rbx + 0xac)); 0x004e7439 imul eax, dword [rbx + 0xa8] | eax *= *((rbx + 0xa8)); 0x004e7440 mov dword [rbx + 0xb0], eax | *((rbx + 0xb0)) = eax; 0x004e7446 jmp 0x4e74d8 | goto label_5; | label_3: 0x004e744b test esi, esi | | if (esi >= 0) { 0x004e744d js 0x4e74a0 | 0x004e744f test edx, edx | | if (edx != 0) { 0x004e7451 je 0x4e746e | 0x004e7453 mov rdi, qword [rbx + 0xa0] | 0x004e745a mov byte [rsp + 7], 0xa | *((rsp + 7)) = 0xa; 0x004e745f lea rsi, [rsp + 7] | 0x004e7464 mov edx, 1 | 0x004e7469 call 0x4521a0 | std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (*((rbx + 0xa0)), rsp + 7, 1); | } 0x004e746e mov rdi, qword [rbx + 0xa0] | 0x004e7475 mov esi, dword [rbx + 0xa8] | 0x004e747b mov edx, dword [rbx + 0xac] | edx = *((rbx + 0xac)); 0x004e7481 call 0x4efc90 | BloombergLP::bdlb::Print::indent(std::_1::basic_ostream>&,int,int) (*((rbx + 0xa0)), *((rbx + 0xa8))); 0x004e7486 mov eax, dword [rbx + 0xac] | eax = *((rbx + 0xac)); 0x004e748c imul eax, dword [rbx + 0xa8] | eax *= *((rbx + 0xa8)); 0x004e7493 mov dword [rbx + 0xb0], eax | *((rbx + 0xb0)) = eax; 0x004e7499 mov rax, qword [rbx + 0xc0] | rax = *((rbx + 0xc0)); | } | label_4: 0x004e74a0 mov dword [rax - 4], 3 | *((rax - 4)) = 3; | } 0x004e74a7 mov byte [rbx + 0xdd], 1 | *((rbx + 0xdd)) = 1; | label_2: 0x004e74ae cmp byte [rbx + 0xdd], 0 | | if (*((rbx + 0xdd)) != 0) { 0x004e74b5 jne 0x4e74d8 | goto label_5; | } 0x004e74b7 mov rdi, qword [rbx + 0xa0] | 0x004e74be mov byte [rsp + 2], 0x20 | *((rsp + 2)) = 0x20; 0x004e74c3 lea rsi, [rsp + 2] | 0x004e74c8 mov edx, 1 | 0x004e74cd call 0x4521a0 | std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (*((rbx + 0xa0)), rsp + 2, 1); 0x004e74d2 inc dword [rbx + 0xb0] | *((rbx + 0xb0))++; | } | label_5: 0x004e74d8 mov rdi, qword [rbx + 0xa0] | 0x004e74df mov rsi, qword [r14] | 0x004e74e2 mov rdx, qword [r14 + 8] | 0x004e74e6 call 0x4521a0 | std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (*((rbx + 0xa0)), *(r14), *((r14 + 8))); 0x004e74eb add dword [rbx + 0xb0], r15d | *((rbx + 0xb0)) += r15d; 0x004e74f2 mov word [rbx + 0xdc], 0 | *((rbx + 0xdc)) = 0; | label_1: 0x004e74fb add rsp, 8 | 0x004e74ff pop rbx | 0x004e7500 pop r14 | 0x004e7502 pop r15 | 0x004e7504 pop rbp | 0x004e7505 ret | return rax; | }