; assembly | /* r2dec pseudo code output */ | /* balxml_encoder.t/assume @ 0x4e2bc0 */ | #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) */ 0x004e2bc0 push rbp | 0x004e2bc1 push r15 | 0x004e2bc3 push r14 | 0x004e2bc5 push r13 | 0x004e2bc7 push r12 | 0x004e2bc9 push rbx | 0x004e2bca sub rsp, 0x28 | 0x004e2bce mov r13, rsi | r13 = rsi; 0x004e2bd1 mov r15, rdi | r15 = rdi; 0x004e2bd4 mov r12, qword [rdi] | r12 = *(rdi); 0x004e2bd7 lea r8, [rsi + 0x88] | r8 = rsi + 0x88; 0x004e2bde mov ebx, dword [rip + 0x7d6fc] | ebx = *(0x005602e0); 0x004e2be4 test ebx, 0x40000 | | if ((ebx & 0x40000) == 0) { 0x004e2bea jne 0x4e2bfc | 0x004e2bec test ebx, 0x20000 | | if ((ebx & 0x20000) == 0) { 0x004e2bf2 jne 0x4e2c09 | 0x004e2bf4 xor r14d, r14d | r14d = 0; 0x004e2bf7 mov sil, 1 | sil = 1; 0x004e2bfa jmp 0x4e2c63 | | } else { 0x004e2bfc mov r14b, 1 | r14b = 1; 0x004e2bff mov ebp, dword [rip + 0x7d6bb] | ebp = BloombergLP::s_baltst::MySequenceWithNullables::ATTRIBUTE_INFO_ARRAY; 0x004e2c05 xor esi, esi | esi = 0; 0x004e2c07 jmp 0x4e2c65 | goto label_4; | } 0x004e2c09 mov rax, qword [rip + 0x7d6b8] | rax = *(str.attribute1); 0x004e2c10 movsxd rcx, dword [rip + 0x7d6b9] | rcx = *(0x005602d0); 0x004e2c17 mov qword [rsp], rax | *(rsp) = rax; 0x004e2c1b mov qword [rsp + 8], rcx | *((rsp + 8)) = rcx; 0x004e2c20 cmp byte [r13 + 0x8c], 0 | | if (*((r13 + 0x8c)) != 0) { 0x004e2c28 je 0x4e2c5e | 0x004e2c2a mov rdi, qword [r12] | 0x004e2c2e mov rsi, rsp | 0x004e2c31 mov rdx, r8 | rdx = r8; 0x004e2c34 mov ecx, ebx | 0x004e2c36 mov rbp, r8 | 0x004e2c39 call 0x466990 | voidBloombergLP::balxml::Formatter::addAttribute(std::_1::basic_string_view>const&,intconst&,int) (*(r12), rsp, rdx, ebx); 0x004e2c3e mov rax, qword [r12] | rax = *(r12); 0x004e2c42 mov rax, qword [rax + 0xa0] | rax = *((rax + 0xa0)); 0x004e2c49 mov rcx, qword [rax] | rcx = *(rax); 0x004e2c4c mov rcx, qword [rcx - 0x18] | rcx = *((rcx - 0x18)); 0x004e2c50 cmp dword [rax + rcx + 0x20], 0 | | if (*((rax + rcx + 0x20)) != 0) { 0x004e2c55 jne 0x4e2d84 | goto label_5; | } 0x004e2c5b mov r8, rbp | r8 = rbp; | } 0x004e2c5e xor r14d, r14d | r14d = 0; 0x004e2c61 xor esi, esi | esi = 0; | } 0x004e2c63 xor ebp, ebp | ebp = 0; | label_4: 0x004e2c65 mov ebx, dword [rip + 0x7d69d] | ebx = *(0x00560308); 0x004e2c6b test ebx, 0x40000 | | if ((ebx & 0x40000) == 0) { 0x004e2c71 jne 0x4e2c80 | 0x004e2c73 test ebx, 0x20000 | | if ((ebx & 0x20000) != 0) { 0x004e2c79 jne 0x4e2cd2 | goto label_6; | } 0x004e2c7b mov sil, 1 | sil = 1; 0x004e2c7e jmp 0x4e2c89 | | } else { 0x004e2c80 mov r14b, 1 | r14b = 1; 0x004e2c83 mov ebp, dword [rip + 0x7d65f] | ebp = *(0x005602e8); | } | do { | label_0: 0x004e2c89 mov ebx, dword [rip + 0x7d6a1] | ebx = .comment; 0x004e2c8f test ebx, 0x40000 | | if ((ebx & 0x40000) == 0) { 0x004e2c95 jne 0x4e2cb1 | 0x004e2c97 lea rdx, [r13 + 0x40] | rdx = r13 + 0x40; 0x004e2c9b test ebx, 0x20000 | | if ((ebx & 0x20000) != 0) { 0x004e2ca1 jne 0x4e2d31 | goto label_7; | } 0x004e2ca7 test r14b, r14b | | if (r14b != 0) { 0x004e2caa jne 0x4e2cb7 | goto label_1; | } 0x004e2cac jmp 0x4e2dd0 | goto label_8; | } 0x004e2cb1 mov ebp, dword [rip + 0x7d659] | ebp = *(0x00560310); | label_1: 0x004e2cb7 mov rax, qword [r15] | rax = *(r15); 0x004e2cba mov qword [rsp], rax | *(rsp) = rax; 0x004e2cbe mov rsi, rsp | 0x004e2cc1 mov rdi, r13 | 0x004e2cc4 mov edx, ebp | 0x004e2cc6 call 0x4e2e40 | eax = intBloombergLP::bdlat_SequenceFunctions::bdlat_sequenceAccessAttribute(BloombergLP::s_baltst::MySequenceWithNullablesconst&,BloombergLP::balxml::Encoder_EncodeValue&,int) (r13, rsp, ebp); | label_3: 0x004e2ccb mov ebp, eax | 0x004e2ccd jmp 0x4e2da3 | goto label_2; | label_6: 0x004e2cd2 mov rax, qword [rip + 0x7d617] | rax = *(str.attribute2); 0x004e2cd9 movsxd rcx, dword [rip + 0x7d618] | rcx = *(0x005602f8); 0x004e2ce0 mov qword [rsp], rax | *(rsp) = rax; 0x004e2ce4 mov qword [rsp + 8], rcx | *((rsp + 8)) = rcx; 0x004e2ce9 cmp byte [r13 + 0x30], 0 | 0x004e2cee je 0x4e2c89 | | } while (*((r13 + 0x30)) == 0); 0x004e2cf0 mov dword [rsp + 0x14], esi | *((rsp + 0x14)) = esi; 0x004e2cf4 mov qword [rsp + 0x18], r8 | *((rsp + 0x18)) = r8; 0x004e2cf9 mov rdi, qword [r12] | 0x004e2cfd mov rsi, rsp | 0x004e2d00 mov rdx, r13 | 0x004e2d03 mov ecx, ebx | 0x004e2d05 call 0x452d00 | voidBloombergLP::balxml::Formatter::addAttribute,bsl::allocator>>(std::_1::basic_string_view>const&,bsl::basic_string,bsl::allocator>const&,int) (*(r12), rsp, r13, ebx); 0x004e2d0a mov rax, qword [r12] | rax = *(r12); 0x004e2d0e mov rax, qword [rax + 0xa0] | rax = *((rax + 0xa0)); 0x004e2d15 mov rcx, qword [rax] | rcx = *(rax); 0x004e2d18 mov rcx, qword [rcx - 0x18] | rcx = *((rcx - 0x18)); 0x004e2d1c cmp dword [rax + rcx + 0x20], 0 | | if (*((rax + rcx + 0x20)) == 0) { 0x004e2d21 jne 0x4e2d84 | 0x004e2d23 mov r8, qword [rsp + 0x18] | r8 = *((rsp + 0x18)); 0x004e2d28 mov esi, dword [rsp + 0x14] | esi = *((rsp + 0x14)); 0x004e2d2c jmp 0x4e2c89 | goto label_0; | label_7: 0x004e2d31 mov rax, qword [rip + 0x7d5e0] | rax = *(str.attribute3); 0x004e2d38 movsxd rcx, dword [rip + 0x7d5e1] | rcx = *(0x00560320); 0x004e2d3f mov qword [rsp], rax | *(rsp) = rax; 0x004e2d43 mov qword [rsp + 8], rcx | *((rsp + 8)) = rcx; 0x004e2d48 cmp byte [r13 + 0x78], 0 | | if (*((r13 + 0x78)) == 0) { 0x004e2d4d je 0x4e2dc2 | goto label_9; | } 0x004e2d4f mov dword [rsp + 0x14], esi | *((rsp + 0x14)) = esi; 0x004e2d53 mov qword [rsp + 0x18], r8 | *((rsp + 0x18)) = r8; 0x004e2d58 mov rdi, qword [r12] | 0x004e2d5c mov rsi, rsp | 0x004e2d5f mov ecx, ebx | 0x004e2d61 mov qword [rsp + 0x20], rdx | *((rsp + 0x20)) = rdx; 0x004e2d66 call 0x4dfee0 | voidBloombergLP::balxml::Formatter::addAttribute(std::_1::basic_string_view>const&,BloombergLP::s_baltst::MySequenceconst&,int) (*(r12), rsp, rdx, ebx); 0x004e2d6b mov rax, qword [r12] | rax = *(r12); 0x004e2d6f mov rax, qword [rax + 0xa0] | rax = *((rax + 0xa0)); 0x004e2d76 mov rcx, qword [rax] | rcx = *(rax); 0x004e2d79 mov rcx, qword [rcx - 0x18] | rcx = *((rcx - 0x18)); 0x004e2d7d cmp dword [rax + rcx + 0x20], 0 | | if (*((rax + rcx + 0x20)) == 0) { 0x004e2d82 je 0x4e2db4 | goto label_10; | } | } | label_5: 0x004e2d84 mov rdi, qword [r12 + 8] | 0x004e2d89 mov rdx, rsp | 0x004e2d8c mov ebp, 0xffffffff | 0x004e2d91 mov esi, 0x552277 | 0x004e2d96 mov ecx, ebx | 0x004e2d98 mov r8d, 0xffffffff | 0x004e2d9e call 0x4e4a00 | 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: 0x004e2da3 mov eax, ebp | eax = ebp; 0x004e2da5 add rsp, 0x28 | 0x004e2da9 pop rbx | 0x004e2daa pop r12 | 0x004e2dac pop r13 | 0x004e2dae pop r14 | 0x004e2db0 pop r15 | 0x004e2db2 pop rbp | 0x004e2db3 ret | return rax; | label_10: 0x004e2db4 mov r8, qword [rsp + 0x18] | r8 = *((rsp + 0x18)); 0x004e2db9 mov esi, dword [rsp + 0x14] | esi = *((rsp + 0x14)); 0x004e2dbd mov rdx, qword [rsp + 0x20] | rdx = *((rsp + 0x20)); | label_9: 0x004e2dc2 test r14b, r14b | | if (r14b != 0) { 0x004e2dc5 jne 0x4e2cb7 | goto label_1; | } 0x004e2dcb test sil, sil | | if (sil == 0) { 0x004e2dce je 0x4e2e38 | goto label_11; | } | label_8: 0x004e2dd0 mov rbx, rdx | rbx = rdx; 0x004e2dd3 mov rax, qword [r15] | rax = *(r15); 0x004e2dd6 mov qword [rsp], rax | *(rsp) = rax; 0x004e2dda test byte [rip + 0x7d501], 2 | | if ((*(0x005602e2) & 2) != 0) { 0x004e2de1 jne 0x4e2df9 | goto label_12; | } 0x004e2de3 mov rdi, rsp | 0x004e2de6 mov edx, 0x5602c0 | 0x004e2deb mov rsi, r8 | 0x004e2dee call 0x48f4b0 | 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); 0x004e2df3 mov ebp, eax | 0x004e2df5 test eax, eax | | if (eax != 0) { 0x004e2df7 jne 0x4e2da3 | goto label_2; | } | label_12: 0x004e2df9 test byte [rip + 0x7d50a], 2 | | if ((*(0x0056030a) & 2) != 0) { 0x004e2e00 jne 0x4e2e18 | goto label_13; | } 0x004e2e02 mov rdi, rsp | 0x004e2e05 mov edx, 0x5602e8 | 0x004e2e0a mov rsi, r13 | 0x004e2e0d call 0x4df670 | eax = intBloombergLP::balxml::Encoder_EncodeObject::operator(),bsl::allocator>>,BloombergLP::bdlat_AttributeInfo>(BloombergLP::bdlb::NullableValue,bsl::allocator>>const&,BloombergLP::bdlat_AttributeInfoconst&) (rsp, r13, 0x5602e8); 0x004e2e12 mov ebp, eax | 0x004e2e14 test eax, eax | | if (eax != 0) { 0x004e2e16 jne 0x4e2da3 | goto label_2; | } | label_13: 0x004e2e18 xor ebp, ebp | ebp = 0; 0x004e2e1a test byte [rip + 0x7d511], 2 | | if ((*(0x00560332) & 2) != 0) { 0x004e2e21 jne 0x4e2da3 | goto label_2; | } 0x004e2e23 mov rdi, rsp | 0x004e2e26 mov edx, 0x560310 | 0x004e2e2b mov rsi, rbx | 0x004e2e2e call 0x4e0360 | intBloombergLP::balxml::Encoder_EncodeObject::operator(),BloombergLP::bdlat_AttributeInfo>(BloombergLP::bdlb::NullableValueconst&,BloombergLP::bdlat_AttributeInfoconst&) (rsp, rbx, 0x560310); 0x004e2e33 jmp 0x4e2ccb | goto label_3; | label_11: 0x004e2e38 xor ebp, ebp | ebp = 0; 0x004e2e3a jmp 0x4e2da3 | goto label_2; | }