; assembly | /* r2dec pseudo code output */ | /* balxml_encoder.t/none @ 0x4e3380 */ | #include | ; (fcn) method.int_BloombergLP::balxml::Encoder_EncodeValue::executeImp_BloombergLP::s_baltst.MySequenceWithNullables__BloombergLP::s_baltst::MySequenceWithNullables_const__int__BloombergLP::bdlat_TypeCategory::Sequence_ () | int64_t method_int_BloombergLP::balxml::Encoder_EncodeValue::executeImp_BloombergLP::s_baltst_MySequenceWithNullables_BloombergLP::s_baltst::MySequenceWithNullables_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::MySequenceWithNullables const&, int, BloombergLP::bdlat_TypeCategory::Sequence) */ 0x004e3380 push rbp | 0x004e3381 push r15 | 0x004e3383 push r14 | 0x004e3385 push r13 | 0x004e3387 push r12 | 0x004e3389 push rbx | 0x004e338a sub rsp, 0x28 | 0x004e338e mov r13, rsi | r13 = rsi; 0x004e3391 mov r15, rdi | r15 = rdi; 0x004e3394 mov r12, qword [rdi] | r12 = *(rdi); 0x004e3397 lea r8, [rsi + 0x88] | r8 = rsi + 0x88; 0x004e339e mov ebx, dword [rip + 0x7d91c] | ebx = *(0x00560cc0); 0x004e33a4 test ebx, 0x40000 | | if ((ebx & 0x40000) == 0) { 0x004e33aa jne 0x4e33bb | 0x004e33ac test ebx, 0x20000 | | if ((ebx & 0x20000) == 0) { 0x004e33b2 jne 0x4e33c8 | 0x004e33b4 mov sil, 1 | sil = 1; 0x004e33b7 xor ebp, ebp | ebp = 0; 0x004e33b9 jmp 0x4e3427 | | } else { 0x004e33bb mov r14b, 1 | r14b = 1; 0x004e33be mov ebp, dword [rip + 0x7d8dc] | ebp = BloombergLP::s_baltst::MySequenceWithNullables::ATTRIBUTE_INFO_ARRAY; 0x004e33c4 xor esi, esi | esi = 0; 0x004e33c6 jmp 0x4e342a | goto label_4; | } 0x004e33c8 mov rax, qword [rip + 0x7d8d9] | rax = *(str.attribute1); 0x004e33cf movsxd rcx, dword [rip + 0x7d8da] | rcx = *(0x00560cb0); 0x004e33d6 mov qword [rsp], rax | *(rsp) = rax; 0x004e33da mov qword [rsp + 8], rcx | *((rsp + 8)) = rcx; 0x004e33df cmp byte [r13 + 0x8c], 0 | | if (*((r13 + 0x8c)) != 0) { 0x004e33e7 je 0x4e3423 | 0x004e33e9 mov rdi, qword [r12] | 0x004e33ed mov rsi, rsp | 0x004e33f0 mov rdx, r8 | rdx = r8; 0x004e33f3 mov ecx, ebx | 0x004e33f5 mov r14, r8 | r14 = r8; 0x004e33f8 call 0x4674e0 | voidBloombergLP::balxml::Formatter::addAttribute(std::_1::basic_string_view>const&,intconst&,int) (*(r12), rsp, rdx, ebx); 0x004e33fd mov rax, qword [r12] | rax = *(r12); 0x004e3401 mov rax, qword [rax + 0xa0] | rax = *((rax + 0xa0)); 0x004e3408 mov rcx, qword [rax] | rcx = *(rax); 0x004e340b mov rcx, qword [rcx - 0x18] | rcx = *((rcx - 0x18)); 0x004e340f cmp dword [rax + rcx + 0x20], 0 | | if (*((rax + rcx + 0x20)) != 0) { 0x004e3414 jne 0x4e3549 | goto label_5; | } 0x004e341a xor ebp, ebp | ebp = 0; 0x004e341c xor esi, esi | esi = 0; 0x004e341e mov r8, r14 | r8 = r14; 0x004e3421 jmp 0x4e3427 | | } else { 0x004e3423 xor ebp, ebp | ebp = 0; 0x004e3425 xor esi, esi | esi = 0; | } | } 0x004e3427 xor r14d, r14d | r14d = 0; | label_4: 0x004e342a mov ebx, dword [rip + 0x7d8b8] | ebx = *(0x00560ce8); 0x004e3430 test ebx, 0x40000 | | if ((ebx & 0x40000) == 0) { 0x004e3436 jne 0x4e3445 | 0x004e3438 test ebx, 0x20000 | | if ((ebx & 0x20000) != 0) { 0x004e343e jne 0x4e3497 | goto label_6; | } 0x004e3440 mov sil, 1 | sil = 1; 0x004e3443 jmp 0x4e344e | | } else { 0x004e3445 mov r14b, 1 | r14b = 1; 0x004e3448 mov ebp, dword [rip + 0x7d87a] | ebp = *(0x00560cc8); | } | do { | label_0: 0x004e344e mov ebx, dword [rip + 0x7d8bc] | ebx = .comment; 0x004e3454 test ebx, 0x40000 | | if ((ebx & 0x40000) == 0) { 0x004e345a jne 0x4e3476 | 0x004e345c lea rdx, [r13 + 0x40] | rdx = r13 + 0x40; 0x004e3460 test ebx, 0x20000 | | if ((ebx & 0x20000) != 0) { 0x004e3466 jne 0x4e34f6 | goto label_7; | } 0x004e346c test r14b, r14b | | if (r14b != 0) { 0x004e346f jne 0x4e347c | goto label_1; | } 0x004e3471 jmp 0x4e3595 | goto label_8; | } 0x004e3476 mov ebp, dword [rip + 0x7d874] | ebp = *(0x00560cf0); | label_1: 0x004e347c mov rax, qword [r15] | rax = *(r15); 0x004e347f mov qword [rsp], rax | *(rsp) = rax; 0x004e3483 mov rsi, rsp | 0x004e3486 mov rdi, r13 | 0x004e3489 mov edx, ebp | 0x004e348b call 0x4e3610 | eax = intBloombergLP::bdlat_SequenceFunctions::bdlat_sequenceAccessAttribute(BloombergLP::s_baltst::MySequenceWithNullablesconst&,BloombergLP::balxml::Encoder_EncodeValue&,int) (r13, rsp, ebp); | label_3: 0x004e3490 mov ebp, eax | 0x004e3492 jmp 0x4e3568 | goto label_2; | label_6: 0x004e3497 mov rax, qword [rip + 0x7d832] | rax = *(str.attribute2); 0x004e349e movsxd rcx, dword [rip + 0x7d833] | rcx = *(0x00560cd8); 0x004e34a5 mov qword [rsp], rax | *(rsp) = rax; 0x004e34a9 mov qword [rsp + 8], rcx | *((rsp + 8)) = rcx; 0x004e34ae cmp byte [r13 + 0x30], 0 | 0x004e34b3 je 0x4e344e | | } while (*((r13 + 0x30)) == 0); 0x004e34b5 mov dword [rsp + 0x14], esi | *((rsp + 0x14)) = esi; 0x004e34b9 mov qword [rsp + 0x18], r8 | *((rsp + 0x18)) = r8; 0x004e34be mov rdi, qword [r12] | 0x004e34c2 mov rsi, rsp | 0x004e34c5 mov rdx, r13 | 0x004e34c8 mov ecx, ebx | 0x004e34ca 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); 0x004e34cf mov rax, qword [r12] | rax = *(r12); 0x004e34d3 mov rax, qword [rax + 0xa0] | rax = *((rax + 0xa0)); 0x004e34da mov rcx, qword [rax] | rcx = *(rax); 0x004e34dd mov rcx, qword [rcx - 0x18] | rcx = *((rcx - 0x18)); 0x004e34e1 cmp dword [rax + rcx + 0x20], 0 | | if (*((rax + rcx + 0x20)) == 0) { 0x004e34e6 jne 0x4e3549 | 0x004e34e8 mov r8, qword [rsp + 0x18] | r8 = *((rsp + 0x18)); 0x004e34ed mov esi, dword [rsp + 0x14] | esi = *((rsp + 0x14)); 0x004e34f1 jmp 0x4e344e | goto label_0; | label_7: 0x004e34f6 mov rax, qword [rip + 0x7d7fb] | rax = *(str.attribute3); 0x004e34fd movsxd rcx, dword [rip + 0x7d7fc] | rcx = *(0x00560d00); 0x004e3504 mov qword [rsp], rax | *(rsp) = rax; 0x004e3508 mov qword [rsp + 8], rcx | *((rsp + 8)) = rcx; 0x004e350d cmp byte [r13 + 0x78], 0 | | if (*((r13 + 0x78)) == 0) { 0x004e3512 je 0x4e3587 | goto label_9; | } 0x004e3514 mov dword [rsp + 0x14], esi | *((rsp + 0x14)) = esi; 0x004e3518 mov qword [rsp + 0x18], r8 | *((rsp + 0x18)) = r8; 0x004e351d mov rdi, qword [r12] | 0x004e3521 mov rsi, rsp | 0x004e3524 mov ecx, ebx | 0x004e3526 mov qword [rsp + 0x20], rdx | *((rsp + 0x20)) = rdx; 0x004e352b call 0x4e0680 | voidBloombergLP::balxml::Formatter::addAttribute(std::_1::basic_string_view>const&,BloombergLP::s_baltst::MySequenceconst&,int) (*(r12), rsp, rdx, ebx); 0x004e3530 mov rax, qword [r12] | rax = *(r12); 0x004e3534 mov rax, qword [rax + 0xa0] | rax = *((rax + 0xa0)); 0x004e353b mov rcx, qword [rax] | rcx = *(rax); 0x004e353e mov rcx, qword [rcx - 0x18] | rcx = *((rcx - 0x18)); 0x004e3542 cmp dword [rax + rcx + 0x20], 0 | | if (*((rax + rcx + 0x20)) == 0) { 0x004e3547 je 0x4e3579 | goto label_10; | } | } | label_5: 0x004e3549 mov rdi, qword [r12 + 8] | 0x004e354e mov rdx, rsp | 0x004e3551 mov ebp, 0xffffffff | 0x004e3556 mov esi, 0x552c63 | 0x004e355b mov ecx, ebx | 0x004e355d mov r8d, 0xffffffff | 0x004e3563 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: 0x004e3568 mov eax, ebp | eax = ebp; 0x004e356a add rsp, 0x28 | 0x004e356e pop rbx | 0x004e356f pop r12 | 0x004e3571 pop r13 | 0x004e3573 pop r14 | 0x004e3575 pop r15 | 0x004e3577 pop rbp | 0x004e3578 ret | return rax; | label_10: 0x004e3579 mov r8, qword [rsp + 0x18] | r8 = *((rsp + 0x18)); 0x004e357e mov esi, dword [rsp + 0x14] | esi = *((rsp + 0x14)); 0x004e3582 mov rdx, qword [rsp + 0x20] | rdx = *((rsp + 0x20)); | label_9: 0x004e3587 test r14b, r14b | | if (r14b != 0) { 0x004e358a jne 0x4e347c | goto label_1; | } 0x004e3590 test sil, sil | | if (sil == 0) { 0x004e3593 je 0x4e35fd | goto label_11; | } | label_8: 0x004e3595 mov rbx, rdx | rbx = rdx; 0x004e3598 mov rax, qword [r15] | rax = *(r15); 0x004e359b mov qword [rsp], rax | *(rsp) = rax; 0x004e359f test byte [rip + 0x7d71c], 2 | | if ((*(0x00560cc2) & 2) != 0) { 0x004e35a6 jne 0x4e35be | goto label_12; | } 0x004e35a8 mov rdi, rsp | 0x004e35ab mov edx, 0x560ca0 | 0x004e35b0 mov rsi, r8 | 0x004e35b3 call 0x4903f0 | eax = intBloombergLP::balxml::Encoder_EncodeObject::operator(),BloombergLP::bdlat_AttributeInfo>(BloombergLP::bdlb::NullableValueconst&,BloombergLP::bdlat_AttributeInfoconst&) (rsp, r8, obj.BloombergLP::s_baltst::MySequenceWithNullables::ATTRIBUTE_INFO_ARRAY); 0x004e35b8 mov ebp, eax | 0x004e35ba test eax, eax | | if (eax != 0) { 0x004e35bc jne 0x4e3568 | goto label_2; | } | label_12: 0x004e35be test byte [rip + 0x7d725], 2 | | if ((*(0x00560cea) & 2) != 0) { 0x004e35c5 jne 0x4e35dd | goto label_13; | } 0x004e35c7 mov rdi, rsp | 0x004e35ca mov edx, 0x560cc8 | 0x004e35cf mov rsi, r13 | 0x004e35d2 call 0x4dfe00 | eax = intBloombergLP::balxml::Encoder_EncodeObject::operator(),bsl::allocator>>,BloombergLP::bdlat_AttributeInfo>(BloombergLP::bdlb::NullableValue,bsl::allocator>>const&,BloombergLP::bdlat_AttributeInfoconst&) (rsp, r13, 0x560cc8); 0x004e35d7 mov ebp, eax | 0x004e35d9 test eax, eax | | if (eax != 0) { 0x004e35db jne 0x4e3568 | goto label_2; | } | label_13: 0x004e35dd xor ebp, ebp | ebp = 0; 0x004e35df test byte [rip + 0x7d72c], 2 | | if ((*(0x00560d12) & 2) != 0) { 0x004e35e6 jne 0x4e3568 | goto label_2; | } 0x004e35e8 mov rdi, rsp | 0x004e35eb mov edx, 0x560cf0 | 0x004e35f0 mov rsi, rbx | 0x004e35f3 call 0x4e0b00 | intBloombergLP::balxml::Encoder_EncodeObject::operator(),BloombergLP::bdlat_AttributeInfo>(BloombergLP::bdlb::NullableValueconst&,BloombergLP::bdlat_AttributeInfoconst&) (rsp, rbx, 0x560cf0); 0x004e35f8 jmp 0x4e3490 | goto label_3; | label_11: 0x004e35fd xor ebp, ebp | ebp = 0; 0x004e35ff jmp 0x4e3568 | goto label_2; | }