; assembly | /* r2dec pseudo code output */ | /* balxml_encoder.t/none @ 0x4e03f0 */ | #include | ; (fcn) method.int_BloombergLP::balxml::Encoder_EncodeValue::executeImp_BloombergLP::s_baltst.MySequenceWithNillables__BloombergLP::s_baltst::MySequenceWithNillables_const__int__BloombergLP::bdlat_TypeCategory::Sequence_ () | int64_t method_int_BloombergLP::balxml::Encoder_EncodeValue::executeImp_BloombergLP::s_baltst_MySequenceWithNillables_BloombergLP::s_baltst::MySequenceWithNillables_const_int_BloombergLP::bdlat_TypeCategory::Sequence_ (int64_t arg2, int64_t arg1) { | int64_t var_8h; | int64_t var_14h; | int64_t var_18h; | int64_t var_20h; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::balxml::Encoder_EncodeValue::executeImp(BloombergLP::s_baltst::MySequenceWithNillables const&, int, BloombergLP::bdlat_TypeCategory::Sequence) */ 0x004e03f0 push rbp | 0x004e03f1 push r15 | 0x004e03f3 push r14 | 0x004e03f5 push r13 | 0x004e03f7 push r12 | 0x004e03f9 push rbx | 0x004e03fa sub rsp, 0x28 | 0x004e03fe mov r13, rsi | r13 = rsi; 0x004e0401 mov r15, rdi | r15 = rdi; 0x004e0404 mov r12, qword [rdi] | r12 = *(rdi); 0x004e0407 lea r8, [rsi + 0x88] | r8 = rsi + 0x88; 0x004e040e mov ebx, dword [rip + 0x807fc] | ebx = *(0x00560c10); 0x004e0414 test ebx, 0x40000 | | if ((ebx & 0x40000) == 0) { 0x004e041a jne 0x4e042b | 0x004e041c test ebx, 0x20000 | | if ((ebx & 0x20000) == 0) { 0x004e0422 jne 0x4e0438 | 0x004e0424 mov sil, 1 | sil = 1; 0x004e0427 xor ebp, ebp | ebp = 0; 0x004e0429 jmp 0x4e0497 | | } else { 0x004e042b mov r14b, 1 | r14b = 1; 0x004e042e mov ebp, dword [rip + 0x807bc] | ebp = BloombergLP::s_baltst::MySequenceWithNillables::ATTRIBUTE_INFO_ARRAY; 0x004e0434 xor esi, esi | esi = 0; 0x004e0436 jmp 0x4e049a | goto label_4; | } 0x004e0438 mov rax, qword [rip + 0x807b9] | rax = *(str.attribute1); 0x004e043f movsxd rcx, dword [rip + 0x807ba] | rcx = *(0x00560c00); 0x004e0446 mov qword [rsp], rax | *(rsp) = rax; 0x004e044a mov qword [rsp + 8], rcx | *((rsp + 8)) = rcx; 0x004e044f cmp byte [r13 + 0x8c], 0 | | if (*((r13 + 0x8c)) != 0) { 0x004e0457 je 0x4e0493 | 0x004e0459 mov rdi, qword [r12] | 0x004e045d mov rsi, rsp | 0x004e0460 mov rdx, r8 | rdx = r8; 0x004e0463 mov ecx, ebx | 0x004e0465 mov r14, r8 | r14 = r8; 0x004e0468 call 0x4674e0 | voidBloombergLP::balxml::Formatter::addAttribute(std::_1::basic_string_view>const&,intconst&,int) (*(r12), rsp, rdx, ebx); 0x004e046d mov rax, qword [r12] | rax = *(r12); 0x004e0471 mov rax, qword [rax + 0xa0] | rax = *((rax + 0xa0)); 0x004e0478 mov rcx, qword [rax] | rcx = *(rax); 0x004e047b mov rcx, qword [rcx - 0x18] | rcx = *((rcx - 0x18)); 0x004e047f cmp dword [rax + rcx + 0x20], 0 | | if (*((rax + rcx + 0x20)) != 0) { 0x004e0484 jne 0x4e05b9 | goto label_5; | } 0x004e048a xor ebp, ebp | ebp = 0; 0x004e048c xor esi, esi | esi = 0; 0x004e048e mov r8, r14 | r8 = r14; 0x004e0491 jmp 0x4e0497 | | } else { 0x004e0493 xor ebp, ebp | ebp = 0; 0x004e0495 xor esi, esi | esi = 0; | } | } 0x004e0497 xor r14d, r14d | r14d = 0; | label_4: 0x004e049a mov ebx, dword [rip + 0x80798] | ebx = *(0x00560c38); 0x004e04a0 test ebx, 0x40000 | | if ((ebx & 0x40000) == 0) { 0x004e04a6 jne 0x4e04b5 | 0x004e04a8 test ebx, 0x20000 | | if ((ebx & 0x20000) != 0) { 0x004e04ae jne 0x4e0507 | goto label_6; | } 0x004e04b0 mov sil, 1 | sil = 1; 0x004e04b3 jmp 0x4e04be | | } else { 0x004e04b5 mov r14b, 1 | r14b = 1; 0x004e04b8 mov ebp, dword [rip + 0x8075a] | ebp = *(0x00560c18); | } | do { | label_0: 0x004e04be mov ebx, dword [rip + 0x8079c] | ebx = *(0x00560c60); 0x004e04c4 test ebx, 0x40000 | | if ((ebx & 0x40000) == 0) { 0x004e04ca jne 0x4e04e6 | 0x004e04cc lea rdx, [r13 + 0x40] | rdx = r13 + 0x40; 0x004e04d0 test ebx, 0x20000 | | if ((ebx & 0x20000) != 0) { 0x004e04d6 jne 0x4e0566 | goto label_7; | } 0x004e04dc test r14b, r14b | | if (r14b != 0) { 0x004e04df jne 0x4e04ec | goto label_1; | } 0x004e04e1 jmp 0x4e0605 | goto label_8; | } 0x004e04e6 mov ebp, dword [rip + 0x80754] | ebp = *(0x00560c40); | label_1: 0x004e04ec mov rax, qword [r15] | rax = *(r15); 0x004e04ef mov qword [rsp], rax | *(rsp) = rax; 0x004e04f3 mov rsi, rsp | 0x004e04f6 mov rdi, r13 | 0x004e04f9 mov edx, ebp | 0x004e04fb call 0x4e0940 | eax = intBloombergLP::bdlat_SequenceFunctions::bdlat_sequenceAccessAttribute(BloombergLP::s_baltst::MySequenceWithNillablesconst&,BloombergLP::balxml::Encoder_EncodeValue&,int) (r13, rsp, ebp); | label_3: 0x004e0500 mov ebp, eax | 0x004e0502 jmp 0x4e05d8 | goto label_2; | label_6: 0x004e0507 mov rax, qword [rip + 0x80712] | rax = *(str.attribute2); 0x004e050e movsxd rcx, dword [rip + 0x80713] | rcx = *(0x00560c28); 0x004e0515 mov qword [rsp], rax | *(rsp) = rax; 0x004e0519 mov qword [rsp + 8], rcx | *((rsp + 8)) = rcx; 0x004e051e cmp byte [r13 + 0x30], 0 | 0x004e0523 je 0x4e04be | | } while (*((r13 + 0x30)) == 0); 0x004e0525 mov dword [rsp + 0x14], esi | *((rsp + 0x14)) = esi; 0x004e0529 mov qword [rsp + 0x18], r8 | *((rsp + 0x18)) = r8; 0x004e052e mov rdi, qword [r12] | 0x004e0532 mov rsi, rsp | 0x004e0535 mov rdx, r13 | 0x004e0538 mov ecx, ebx | 0x004e053a call 0x453510 | voidBloombergLP::balxml::Formatter::addAttribute,bsl::allocator>>(std::_1::basic_string_view>const&,bsl::basic_string,bsl::allocator>const&,int) (*(r12), rsp, r13, ebx); 0x004e053f mov rax, qword [r12] | rax = *(r12); 0x004e0543 mov rax, qword [rax + 0xa0] | rax = *((rax + 0xa0)); 0x004e054a mov rcx, qword [rax] | rcx = *(rax); 0x004e054d mov rcx, qword [rcx - 0x18] | rcx = *((rcx - 0x18)); 0x004e0551 cmp dword [rax + rcx + 0x20], 0 | | if (*((rax + rcx + 0x20)) == 0) { 0x004e0556 jne 0x4e05b9 | 0x004e0558 mov r8, qword [rsp + 0x18] | r8 = *((rsp + 0x18)); 0x004e055d mov esi, dword [rsp + 0x14] | esi = *((rsp + 0x14)); 0x004e0561 jmp 0x4e04be | goto label_0; | label_7: 0x004e0566 mov rax, qword [rip + 0x806db] | rax = *(str.attribute3); 0x004e056d movsxd rcx, dword [rip + 0x806dc] | rcx = *(0x00560c50); 0x004e0574 mov qword [rsp], rax | *(rsp) = rax; 0x004e0578 mov qword [rsp + 8], rcx | *((rsp + 8)) = rcx; 0x004e057d cmp byte [r13 + 0x78], 0 | | if (*((r13 + 0x78)) == 0) { 0x004e0582 je 0x4e05f7 | goto label_9; | } 0x004e0584 mov dword [rsp + 0x14], esi | *((rsp + 0x14)) = esi; 0x004e0588 mov qword [rsp + 0x18], r8 | *((rsp + 0x18)) = r8; 0x004e058d mov rdi, qword [r12] | 0x004e0591 mov rsi, rsp | 0x004e0594 mov ecx, ebx | 0x004e0596 mov qword [rsp + 0x20], rdx | *((rsp + 0x20)) = rdx; 0x004e059b call 0x4e0680 | voidBloombergLP::balxml::Formatter::addAttribute(std::_1::basic_string_view>const&,BloombergLP::s_baltst::MySequenceconst&,int) (*(r12), rsp, rdx, ebx); 0x004e05a0 mov rax, qword [r12] | rax = *(r12); 0x004e05a4 mov rax, qword [rax + 0xa0] | rax = *((rax + 0xa0)); 0x004e05ab mov rcx, qword [rax] | rcx = *(rax); 0x004e05ae mov rcx, qword [rcx - 0x18] | rcx = *((rcx - 0x18)); 0x004e05b2 cmp dword [rax + rcx + 0x20], 0 | | if (*((rax + rcx + 0x20)) == 0) { 0x004e05b7 je 0x4e05e9 | goto label_10; | } | } | label_5: 0x004e05b9 mov rdi, qword [r12 + 8] | 0x004e05be mov rdx, rsp | 0x004e05c1 mov ebp, 0xffffffff | 0x004e05c6 mov esi, 0x552c63 | 0x004e05cb mov ecx, ebx | 0x004e05cd mov r8d, 0xffffffff | 0x004e05d3 call 0x4e51d0 | BloombergLP::balxml::Encoder::logError(char const*,std::_1::basic_string_view>const&,int,int) (*((r12 + 8)), "Failed to encode attribute", rsp, ebx, 0xffffffff); | label_2: 0x004e05d8 mov eax, ebp | eax = ebp; 0x004e05da add rsp, 0x28 | 0x004e05de pop rbx | 0x004e05df pop r12 | 0x004e05e1 pop r13 | 0x004e05e3 pop r14 | 0x004e05e5 pop r15 | 0x004e05e7 pop rbp | 0x004e05e8 ret | return rax; | label_10: 0x004e05e9 mov r8, qword [rsp + 0x18] | r8 = *((rsp + 0x18)); 0x004e05ee mov esi, dword [rsp + 0x14] | esi = *((rsp + 0x14)); 0x004e05f2 mov rdx, qword [rsp + 0x20] | rdx = *((rsp + 0x20)); | label_9: 0x004e05f7 test r14b, r14b | | if (r14b != 0) { 0x004e05fa jne 0x4e04ec | goto label_1; | } 0x004e0600 test sil, sil | | if (sil == 0) { 0x004e0603 je 0x4e066d | goto label_11; | } | label_8: 0x004e0605 mov rbx, rdx | rbx = rdx; 0x004e0608 mov rax, qword [r15] | rax = *(r15); 0x004e060b mov qword [rsp], rax | *(rsp) = rax; 0x004e060f test byte [rip + 0x805fc], 2 | | if ((*(0x00560c12) & 2) != 0) { 0x004e0616 jne 0x4e062e | goto label_12; | } 0x004e0618 mov rdi, rsp | 0x004e061b mov edx, 0x560bf0 | 0x004e0620 mov rsi, r8 | 0x004e0623 call 0x4903f0 | eax = intBloombergLP::balxml::Encoder_EncodeObject::operator(),BloombergLP::bdlat_AttributeInfo>(BloombergLP::bdlb::NullableValueconst&,BloombergLP::bdlat_AttributeInfoconst&) (rsp, r8, obj.BloombergLP::s_baltst::MySequenceWithNillables::ATTRIBUTE_INFO_ARRAY); 0x004e0628 mov ebp, eax | 0x004e062a test eax, eax | | if (eax != 0) { 0x004e062c jne 0x4e05d8 | goto label_2; | } | label_12: 0x004e062e test byte [rip + 0x80605], 2 | | if ((*(0x00560c3a) & 2) != 0) { 0x004e0635 jne 0x4e064d | goto label_13; | } 0x004e0637 mov rdi, rsp | 0x004e063a mov edx, 0x560c18 | 0x004e063f mov rsi, r13 | 0x004e0642 call 0x4dfe00 | eax = intBloombergLP::balxml::Encoder_EncodeObject::operator(),bsl::allocator>>,BloombergLP::bdlat_AttributeInfo>(BloombergLP::bdlb::NullableValue,bsl::allocator>>const&,BloombergLP::bdlat_AttributeInfoconst&) (rsp, r13, 0x560c18); 0x004e0647 mov ebp, eax | 0x004e0649 test eax, eax | | if (eax != 0) { 0x004e064b jne 0x4e05d8 | goto label_2; | } | label_13: 0x004e064d xor ebp, ebp | ebp = 0; 0x004e064f test byte [rip + 0x8060c], 2 | | if ((*(0x00560c62) & 2) != 0) { 0x004e0656 jne 0x4e05d8 | goto label_2; | } 0x004e0658 mov rdi, rsp | 0x004e065b mov edx, 0x560c40 | 0x004e0660 mov rsi, rbx | 0x004e0663 call 0x4e0b00 | intBloombergLP::balxml::Encoder_EncodeObject::operator(),BloombergLP::bdlat_AttributeInfo>(BloombergLP::bdlb::NullableValueconst&,BloombergLP::bdlat_AttributeInfoconst&) (rsp, rbx, 0x560c40); 0x004e0668 jmp 0x4e0500 | goto label_3; | label_11: 0x004e066d xor ebp, ebp | ebp = 0; 0x004e066f jmp 0x4e05d8 | goto label_2; | }