; assembly | /* r2dec pseudo code output */ | /* baljsn_encoder.t/assume @ 0x475d40 */ | #include | ; (fcn) method.int_BloombergLP::s_baltst::Sequence1::accessAttributes_BloombergLP::baljsn.Encoder_AttributeVisitor__BloombergLP::baljsn::Encoder_AttributeVisitor__const () | uint64_t method_int_BloombergLP::s_baltst::Sequence1::accessAttributes_BloombergLP::baljsn_Encoder_AttributeVisitor_BloombergLP::baljsn::Encoder_AttributeVisitor_const (int64_t arg2, int64_t arg1) { | int64_t var_fh; | uint32_t var_10h; | int64_t var_18h; | int64_t var_20h; | int64_t var_28h; | int64_t var_30h; | int64_t var_38h; | int64_t var_40h; | int64_t var_48h; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::s_baltst::Sequence1::accessAttributes(BloombergLP::baljsn::Encoder_AttributeVisitor&) const */ 0x00475d40 push rbp | 0x00475d41 push r14 | 0x00475d43 push rbx | 0x00475d44 sub rsp, 0x50 | 0x00475d48 mov rbx, rsi | rbx = rsi; 0x00475d4b mov r14, rdi | r14 = rdi; 0x00475d4e mov rsi, qword [rsi] | rsi = *(rsi); 0x00475d51 mov rdx, qword [rbx + 8] | rdx = *((rbx + 8)); 0x00475d55 mov rcx, qword [rip + 0x1d354c] | rcx = *(str.element1); 0x00475d5c movsxd rdi, dword [rip + 0x1d354d] | rdi = *(0x006492b0); 0x00475d63 mov r9d, dword [rip + 0x1d3556] | r9d = .comment; 0x00475d6a mov rbp, qword [rbx + 0x10] | rbp = *((rbx + 0x10)); 0x00475d6e mov al, byte [rbx + 0x18] | al = *((rbx + 0x18)); 0x00475d71 mov byte [rsp + 0x10], 0 | *((rsp + 0x10)) = 0; 0x00475d76 mov qword [rsp + 0x18], rsi | *((rsp + 0x18)) = rsi; 0x00475d7b mov qword [rsp + 0x20], rdx | *((rsp + 0x20)) = rdx; 0x00475d80 mov qword [rsp + 0x28], rcx | *((rsp + 0x28)) = rcx; 0x00475d85 mov qword [rsp + 0x30], rdi | *((rsp + 0x30)) = rdi; 0x00475d8a mov dword [rsp + 0x38], r9d | *((rsp + 0x38)) = r9d; 0x00475d8f mov qword [rsp + 0x40], rbp | *((rsp + 0x40)) = rbp; 0x00475d94 mov byte [rsp + 0x48], al | *((rsp + 0x48)) = al; 0x00475d98 cmp byte [r14 + 0x1e8], 0 | | if (*((r14 + 0x1e8)) == 0) { 0x00475da0 jne 0x475da8 | 0x00475da2 cmp byte [rbp + 0x19], 0 | | if (*((rbp + 0x19)) == 0) { 0x00475da6 je 0x475dde | goto label_0; | } | } 0x00475da8 lea r8, [r14 + 0x68] | 0x00475dac lea rcx, [rsp + 0x28] | 0x00475db1 movzx eax, al | eax = (int32_t) al; 0x00475db4 lea rdi, [rsp + 0x10] | 0x00475db9 push rax | 0x00475dba push rbp | 0x00475dbb call 0x476020 | eax = intBloombergLP::baljsn::Encoder_EncodeImplUtil::encodeMember,BloombergLP::bdlat_TypeCategory::NullableValue>(bool*,BloombergLP::baljsn::Formatter*,std::_1::basic_ostream>*,std::_1::basic_string_view>const&,BloombergLP::bdlb::NullableValueconst&,int) (rsp + 0x10, rsi, rdx, rsp + 0x28, r14 + 0x68, r9); 0x00475dc0 add rsp, 0x10 | 0x00475dc4 test eax, eax | | if (eax == 0) { 0x00475dc6 jne 0x476008 | 0x00475dcc cmp byte [rsp + 0x10], 0 | | if (*((rsp + 0x10)) != 0) { 0x00475dd1 je 0x475dd8 | 0x00475dd3 mov al, byte [rbx + 0x18] | al = *((rbx + 0x18)); 0x00475dd6 jmp 0x475dde | | } else { 0x00475dd8 mov byte [rbx + 0x18], 0 | *((rbx + 0x18)) = 0; 0x00475ddc xor eax, eax | eax = 0; | } | label_0: 0x00475dde mov rsi, qword [rbx] | rsi = *(rbx); 0x00475de1 mov rdx, qword [rbx + 8] | rdx = *((rbx + 8)); 0x00475de5 mov rcx, qword [rip + 0x1d34e4] | rcx = *(str.element2); 0x00475dec movsxd rdi, dword [rip + 0x1d34e5] | rdi = *(0x006492d8); 0x00475df3 mov r9d, dword [rip + 0x1d34ee] | r9d = .comment; 0x00475dfa mov rbp, qword [rbx + 0x10] | rbp = *((rbx + 0x10)); 0x00475dfe mov byte [rsp + 0x10], 0 | *((rsp + 0x10)) = 0; 0x00475e03 mov qword [rsp + 0x18], rsi | *((rsp + 0x18)) = rsi; 0x00475e08 mov qword [rsp + 0x20], rdx | *((rsp + 0x20)) = rdx; 0x00475e0d mov qword [rsp + 0x28], rcx | *((rsp + 0x28)) = rcx; 0x00475e12 mov qword [rsp + 0x30], rdi | *((rsp + 0x30)) = rdi; 0x00475e17 mov dword [rsp + 0x38], r9d | *((rsp + 0x38)) = r9d; 0x00475e1c mov qword [rsp + 0x40], rbp | *((rsp + 0x40)) = rbp; 0x00475e21 mov byte [rsp + 0x48], al | *((rsp + 0x48)) = al; 0x00475e25 mov rcx, qword [r14 + 0x50] | rcx = *((r14 + 0x50)); 0x00475e29 cmp rcx, qword [r14 + 0x48] | | if (rcx == *((r14 + 0x48))) { 0x00475e2d jne 0x475e3b | 0x00475e2f cmp byte [rbp + 0x18], 0 | | if (*((rbp + 0x18)) == 0) { 0x00475e33 jne 0x475e3b | 0x00475e35 mov r10b, byte [rbx + 0x18] | r10b = *((rbx + 0x18)); 0x00475e39 jmp 0x475e6b | | } | } else { 0x00475e3b lea r8, [r14 + 0x48] | r8 = r14 + 0x48; 0x00475e3f mov byte [rsp + 0xf], 0 | *((rsp + 0xf)) = 0; 0x00475e44 lea rcx, [rsp + 0x28] | rcx = rsp + 0x28; 0x00475e49 movzx eax, al | eax = (int32_t) al; 0x00475e4c lea rdi, [rsp + 0xf] | rdi = rsp + 0xf; 0x00475e51 push rax | 0x00475e52 push rbp | 0x00475e53 call 0x478920 | eax = _ZN11BloombergLP6baljsn22Encoder_EncodeImplUtil12encodeMemberIN3bsl6vectorINS_8s_baltst7Choice1ENS3_9allocatorIS6_EEEEEEiPbPNS0_9FormatterEPNSt3_113basic_ostreamIcNSD_11char_traitsIcEEEERKNSD_17basic_string_viewIcSG_EERKT_iRKNS0_14EncoderOptionsEbNS_18b (); 0x00475e58 add rsp, 0x10 | 0x00475e5c test eax, eax | | if (eax != 0) { 0x00475e5e jne 0x476008 | goto label_1; | } 0x00475e64 mov byte [rbx + 0x18], 0 | *((rbx + 0x18)) = 0; 0x00475e68 xor r10d, r10d | r10d = 0; | } 0x00475e6b mov r8, qword [r14 + 0x1f8] | 0x00475e72 mov rsi, qword [rbx] | 0x00475e75 mov rdx, qword [rbx + 8] | 0x00475e79 mov rdi, qword [rip + 0x1d3478] | rdi = *(str.element3); 0x00475e80 movsxd rbp, dword [rip + 0x1d3479] | rbp = *(0x00649300); 0x00475e87 mov r9d, dword [rip + 0x1d3482] | 0x00475e8e mov rax, qword [rbx + 0x10] | rax = *((rbx + 0x10)); 0x00475e92 mov byte [rsp + 0x10], 0 | *((rsp + 0x10)) = 0; 0x00475e97 mov qword [rsp + 0x18], rsi | *((rsp + 0x18)) = rsi; 0x00475e9c mov qword [rsp + 0x20], rdx | *((rsp + 0x20)) = rdx; 0x00475ea1 lea rcx, [rsp + 0x28] | 0x00475ea6 mov qword [rsp + 0x28], rdi | *((rsp + 0x28)) = rdi; 0x00475eab mov qword [rsp + 0x30], rbp | *((rsp + 0x30)) = rbp; 0x00475eb0 mov dword [rsp + 0x38], r9d | *((rsp + 0x38)) = r9d; 0x00475eb5 mov qword [rsp + 0x40], rax | *((rsp + 0x40)) = rax; 0x00475eba mov byte [rsp + 0x48], r10b | *((rsp + 0x48)) = r10b; 0x00475ebf movzx ebp, r10b | ebp = (int32_t) r10b; 0x00475ec3 lea rdi, [rsp + 0x10] | 0x00475ec8 push rbp | 0x00475ec9 push rax | 0x00475eca call 0x47c3a0 | eax = intBloombergLP::baljsn::Encoder_EncodeImplUtil::encodeMember(bool*,BloombergLP::baljsn::Formatter*,std::_1::basic_ostream>*,std::_1::basic_string_view>const&,BloombergLP::s_baltst::Choice2const&,int,BloombergLP::baljsn::EncoderOptionsconst&,bool,BloombergLP::bdlat_TypeCategory::Choice) (rsp + 0x10, *(rbx), *((rbx + 8)), rsp + 0x28, *((r14 + 0x1f8)), *(0x00649310)); 0x00475ecf add rsp, 0x10 | 0x00475ed3 test eax, eax | | if (eax == 0) { 0x00475ed5 jne 0x475ee6 | 0x00475ed7 cmp byte [rsp + 0x10], 0 | | if (*((rsp + 0x10)) == 0) { 0x00475edc jne 0x475ee6 | 0x00475ede mov byte [rbx + 0x18], 0 | *((rbx + 0x18)) = 0; 0x00475ee2 xor edi, edi | edi = 0; 0x00475ee4 jmp 0x475ef2 | | } | } else { 0x00475ee6 test eax, eax | | if (eax != 0) { 0x00475ee8 jne 0x476008 | goto label_1; | } 0x00475eee mov dil, byte [rbx + 0x18] | dil = *((rbx + 0x18)); | } 0x00475ef2 mov rsi, qword [rbx] | rsi = *(rbx); 0x00475ef5 mov rdx, qword [rbx + 8] | rdx = *((rbx + 8)); 0x00475ef9 mov rcx, qword [rip + 0x1d3420] | rcx = *(str.element4); 0x00475f00 movsxd rbp, dword [rip + 0x1d3421] | rbp = *(0x00649328); 0x00475f07 mov r9d, dword [rip + 0x1d342a] | r9d = *(0x00649338); 0x00475f0e mov rax, qword [rbx + 0x10] | rax = *((rbx + 0x10)); 0x00475f12 mov byte [rsp + 0x10], 0 | *((rsp + 0x10)) = 0; 0x00475f17 mov qword [rsp + 0x18], rsi | *((rsp + 0x18)) = rsi; 0x00475f1c mov qword [rsp + 0x20], rdx | *((rsp + 0x20)) = rdx; 0x00475f21 mov qword [rsp + 0x28], rcx | *((rsp + 0x28)) = rcx; 0x00475f26 mov qword [rsp + 0x30], rbp | *((rsp + 0x30)) = rbp; 0x00475f2b mov dword [rsp + 0x38], r9d | *((rsp + 0x38)) = r9d; 0x00475f30 mov qword [rsp + 0x40], rax | *((rsp + 0x40)) = rax; 0x00475f35 mov byte [rsp + 0x48], dil | *((rsp + 0x48)) = dil; 0x00475f3a mov rcx, qword [r14 + 0x10] | rcx = *((r14 + 0x10)); 0x00475f3e cmp rcx, qword [r14 + 8] | | if (rcx == *((r14 + 8))) { 0x00475f42 jne 0x475f4a | 0x00475f44 cmp byte [rax + 0x18], 0 | | if (*((rax + 0x18)) == 0) { 0x00475f48 je 0x475f85 | goto label_2; | } | } 0x00475f4a lea r8, [r14 + 8] | r8 = r14 + 8; 0x00475f4e mov byte [rsp + 0xf], 0 | *((rsp + 0xf)) = 0; 0x00475f53 lea rcx, [rsp + 0x28] | rcx = rsp + 0x28; 0x00475f58 movzx ebp, dil | ebp = (int32_t) dil; 0x00475f5c lea rdi, [rsp + 0xf] | rdi = rsp + 0xf; 0x00475f61 push rbp | 0x00475f62 push rax | 0x00475f63 call 0x47ca40 | eax = _ZN11BloombergLP6baljsn22Encoder_EncodeImplUtil12encodeMemberIN3bsl6vectorINS_4bdlb13NullableValueINS_8s_baltst7Choice1EEENS3_9allocatorIS9_EEEEEEiPbPNS0_9FormatterEPNSt3_113basic_ostreamIcNSG_11char_traitsIcEEEERKNSG_17basic_string_viewIcSJ_EERKT_iRKNS (); 0x00475f68 add rsp, 0x10 | 0x00475f6c test eax, eax | | if (eax != 0) { 0x00475f6e jne 0x476008 | goto label_1; | } 0x00475f74 mov byte [rbx + 0x18], 0 | *((rbx + 0x18)) = 0; 0x00475f78 mov rsi, qword [rbx] | rsi = *(rbx); 0x00475f7b mov rdx, qword [rbx + 8] | rdx = *((rbx + 8)); 0x00475f7f mov rax, qword [rbx + 0x10] | rax = *((rbx + 0x10)); 0x00475f83 xor edi, edi | edi = 0; | label_2: 0x00475f85 mov rcx, qword [rip + 0x1d33bc] | rcx = *(str.element5); 0x00475f8c movsxd rbp, dword [rip + 0x1d33bd] | rbp = *(0x00649350); 0x00475f93 mov r9d, dword [rip + 0x1d33c6] | r9d = .comment; 0x00475f9a mov byte [rsp + 0x10], 0 | *((rsp + 0x10)) = 0; 0x00475f9f mov qword [rsp + 0x18], rsi | *((rsp + 0x18)) = rsi; 0x00475fa4 mov qword [rsp + 0x20], rdx | *((rsp + 0x20)) = rdx; 0x00475fa9 mov qword [rsp + 0x28], rcx | *((rsp + 0x28)) = rcx; 0x00475fae mov qword [rsp + 0x30], rbp | *((rsp + 0x30)) = rbp; 0x00475fb3 mov dword [rsp + 0x38], r9d | *((rsp + 0x38)) = r9d; 0x00475fb8 mov qword [rsp + 0x40], rax | *((rsp + 0x40)) = rax; 0x00475fbd mov byte [rsp + 0x48], dil | *((rsp + 0x48)) = dil; 0x00475fc2 mov rcx, qword [r14 + 0x30] | rcx = *((r14 + 0x30)); 0x00475fc6 xor ebp, ebp | ebp = 0; 0x00475fc8 cmp rcx, qword [r14 + 0x28] | | if (rcx == *((r14 + 0x28))) { 0x00475fcc jne 0x475fd4 | 0x00475fce cmp byte [rax + 0x18], 0 | | if (*((rax + 0x18)) == 0) { 0x00475fd2 je 0x476006 | goto label_3; | } | } 0x00475fd4 add r14, 0x28 | r14 += 0x28; 0x00475fd8 mov byte [rsp + 0xf], 0 | *((rsp + 0xf)) = 0; 0x00475fdd lea rcx, [rsp + 0x28] | rcx = rsp + 0x28; 0x00475fe2 movzx r10d, dil | r10d = (int32_t) dil; 0x00475fe6 lea rdi, [rsp + 0xf] | rdi = rsp + 0xf; 0x00475feb mov r8, r14 | r8 = r14; 0x00475fee push r10 | 0x00475ff0 push rax | 0x00475ff1 call 0x47cda0 | eax = _ZN11BloombergLP6baljsn22Encoder_EncodeImplUtil12encodeMemberIN3bsl6vectorINS_8s_baltst7Choice3ENS3_9allocatorIS6_EEEEEEiPbPNS0_9FormatterEPNSt3_113basic_ostreamIcNSD_11char_traitsIcEEEERKNSD_17basic_string_viewIcSG_EERKT_iRKNS0_14EncoderOptionsEbNS_18b (); 0x00475ff6 add rsp, 0x10 | 0x00475ffa test eax, eax | | if (eax != 0) { 0x00475ffc je 0x476002 | 0x00475ffe mov ebp, eax | 0x00476000 jmp 0x476006 | | } else { 0x00476002 mov byte [rbx + 0x18], 0 | *((rbx + 0x18)) = 0; | } | label_3: 0x00476006 mov eax, ebp | eax = ebp; | } | label_1: 0x00476008 add rsp, 0x50 | 0x0047600c pop rbx | 0x0047600d pop r14 | 0x0047600f pop rbp | 0x00476010 ret | return rax; | }