; assembly | /* r2dec pseudo code output */ | /* balxml_configschema.t/assume @ 0x4109f0 */ | #include | ; (fcn) method.int_BloombergLP::balxml::Decoder_ParseObject::executeImp_BloombergLP::s_baltst.BasicSchemaChoice__BloombergLP::s_baltst::BasicSchemaChoice__int__BloombergLP::bdlat_TypeCategory::Choice_ () | int64_t method_int_BloombergLP::balxml::Decoder_ParseObject::executeImp_BloombergLP::s_baltst_BasicSchemaChoice_BloombergLP::s_baltst::BasicSchemaChoice_int_BloombergLP::bdlat_TypeCategory::Choice_ (int64_t arg3, int64_t arg2, int64_t arg1) { | int64_t var_8h; | int64_t var_10h; | int64_t var_18h; | int64_t var_20h; | int64_t var_28h; | int64_t var_38h; | int64_t var_40h; | uint32_t var_48h; | int64_t var_50h; | int64_t var_f0h; | int64_t var_f8h; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::balxml::Decoder_ParseObject::executeImp(BloombergLP::s_baltst::BasicSchemaChoice*, int, BloombergLP::bdlat_TypeCategory::Choice) */ 0x004109f0 push r15 | 0x004109f2 push r14 | 0x004109f4 push rbx | 0x004109f5 sub rsp, 0x100 | 0x004109fc mov r14, rsi | r14 = rsi; 0x004109ff mov rbx, rdi | rbx = rdi; 0x00410a02 test edx, 0x10000 | | if ((edx & 0x10000) == 0) { 0x00410a08 jne 0x410a56 | 0x00410a0a mov qword [rsp + 8], 0x49c850 | *((rsp + 8)) = vtable.BloombergLP::balxml::Decoder_ChoiceContext_BloombergLP::s_baltst::BasicSchemaChoice_.0; 0x00410a13 mov byte [rsp + 0x10], 0 | *((rsp + 0x10)) = 0; 0x00410a18 mov qword [rsp + 0x18], r14 | *((rsp + 0x18)) = r14; 0x00410a1d mov byte [rsp + 0x20], 0 | *((rsp + 0x20)) = 0; 0x00410a22 mov qword [rsp + 0x28], 0 | *((rsp + 0x28)) = 0; 0x00410a2b movaps xmm0, xmmword [rip + 0x8905e] | xmm0 = .comment; 0x00410a32 movups xmmword [rsp + 0x40], xmm0 | __asm ("movups xmmword [rsp + 0x40], xmm0"); 0x00410a37 mov rax, qword [rip + 0x2cf6c2] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x00410a3e test rax, rax | | if (rax == 0) { 0x00410a41 je 0x410b37 | goto label_0; | } 0x00410a47 mov qword [rsp + 0x50], rax | *((rsp + 0x50)) = rax; 0x00410a4c lea rcx, [rsp + 0x28] | rcx = rsp + 0x28; 0x00410a51 jmp 0x410bb4 | goto label_1; | } 0x00410a56 mov rax, qword [rbx] | rax = *(rbx); 0x00410a59 mov rax, qword [rax] | rax = *(rax); 0x00410a5c cmp byte [rax + 8], 0 | | if (*((rax + 8)) != 0) { 0x00410a60 je 0x410a77 | 0x00410a62 mov rdi, qword [rbx + 8] | 0x00410a66 mov esi, dword [rbx + 0x10] | 0x00410a69 call 0x43a600 | rax = BloombergLP::s_baltst::BasicSchemaChoice::lookupSelectionInfo(char const*,int) (*((rbx + 8)), *((rbx + 0x10))); 0x00410a6e test rax, rax | | if (rax == 0) { 0x00410a71 je 0x410b8a | goto label_2; | } | } 0x00410a77 mov rsi, qword [rbx + 8] | 0x00410a7b mov edx, dword [rbx + 0x10] | 0x00410a7e mov rdi, r14 | 0x00410a81 call 0x43b290 | eax = BloombergLP::s_baltst::BasicSchemaChoice::makeSelection(char const*,int) (r14, *((rbx + 8)), *((rbx + 0x10))); 0x00410a86 test eax, eax | | if (eax == 0) { 0x00410a88 je 0x410b50 | goto label_3; | } 0x00410a8e mov r15, qword [rbx] | r15 = *(rbx); 0x00410a91 mov rsi, qword [r15 + 0x2d0] | 0x00410a98 lea r14, [rsp + 8] | r14 = rsp + 8; 0x00410a9d mov rdi, r14 | 0x00410aa0 call 0x40edc0 | BloombergLP::balxml::Decoder::MemOutStream::MemOutStream(BloombergLP::bslma::Allocator*) (r14, *((r15 + 0x2d0))); 0x00410aa5 mov dword [rsp + 0xf0], 2 | *((rsp + 0xf0)) = 2; 0x00410ab0 mov qword [rsp + 0xf8], r15 | *((rsp + 0xf8)) = r15; 0x00410ab8 mov esi, 0x49a6e9 | 0x00410abd mov edx, 0x1b | 0x00410ac2 mov rdi, r14 | 0x00410ac5 call 0x40daf0 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (r14, "Unable to make selection: \", 0x1b); 0x00410aca mov r14, rax | r14 = rax; 0x00410acd mov rbx, qword [rbx + 8] | rbx = *((rbx + 8)); 0x00410ad1 mov rdi, rbx | 0x00410ad4 call 0x404740 | rax = strlen (*((rbx + 8))); 0x00410ad9 mov rdi, r14 | 0x00410adc mov rsi, rbx | 0x00410adf mov rdx, rax | 0x00410ae2 call 0x40daf0 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (r14, rbx, rax); 0x00410ae7 mov esi, 0x49a5ef | 0x00410aec mov edx, 2 | 0x00410af1 mov rdi, rax | 0x00410af4 call 0x40daf0 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, 0x49a5ef, 2); 0x00410af9 mov rdi, rax | rdi = rax; 0x00410afc call 0x4049b0 | std::_1::basic_ostream>::flush() (); 0x00410b01 mov rdi, qword [rsp + 0xf8] | 0x00410b09 mov esi, dword [rsp + 0xf0] | 0x00410b10 mov rdx, qword [rsp + 0x38] | 0x00410b15 mov eax, dword [rsp + 0x40] | eax = *((rsp + 0x40)); 0x00410b19 sub eax, edx | eax -= edx; 0x00410b1b movsxd rcx, eax | rcx = (int64_t) eax; 0x00410b1e call 0x421940 | BloombergLP::balxml::Decoder::setDecoderError(BloombergLP::balxml::ErrorInfo::Severity,std::_1::basic_string_view>) (*((rsp + 0xf8)), *((rsp + 0xf0)), *((rsp + 0x38)), rcx); 0x00410b23 lea rdi, [rsp + 8] | 0x00410b28 call 0x420f00 | BloombergLP::balxml::Decoder::MemOutStream::~MemOutStream() (rsp + 8); | do { 0x00410b2d mov ebx, 0xffffffff | ebx = 0xffffffff; 0x00410b32 jmp 0x410bfa | goto label_4; | label_0: 0x00410b37 call 0x474010 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00410b3c cmp qword [rsp + 0x48], 0x17 | 0x00410b42 mov qword [rsp + 0x50], rax | *((rsp + 0x50)) = rax; | if (*((rsp + 0x48)) != 0x17) { 0x00410b47 jne 0x410baf | goto label_5; | } 0x00410b49 lea rcx, [rsp + 0x28] | rcx = rsp + 0x28; 0x00410b4e jmp 0x410bb4 | goto label_1; | label_3: 0x00410b50 mov eax, dword [r14 + 0xa0] | eax = *((r14 + 0xa0)); 0x00410b57 cmp eax, 2 | | if (eax == 2) { 0x00410b5a je 0x410c09 | goto label_6; | } 0x00410b60 cmp eax, 1 | | if (eax == 1) { 0x00410b63 je 0x410c26 | goto label_7; | } 0x00410b69 test eax, eax | 0x00410b6b jne 0x410b2d | | } while (eax != 0); 0x00410b6d mov edx, dword [rip + 0x9134d] | edx = .comment; 0x00410b73 mov rdi, rbx | rdi = rbx; 0x00410b76 mov rsi, r14 | rsi = r14; 0x00410b79 add rsp, 0x100 | 0x00410b80 pop rbx | 0x00410b81 pop r14 | 0x00410b83 pop r15 | 0x00410b85 jmp 0x410d30 | void (*0x410d30)() (); | label_2: 0x00410b8a mov rax, qword [rbx] | rax = *(rbx); 0x00410b8d inc dword [rax + 0x410] | *((rax + 0x410))++; 0x00410b93 lea r14, [rsp + 8] | r14 = rsp + 8; 0x00410b98 mov rdi, r14 | rdi = r14; 0x00410b9b call 0x421d50 | BloombergLP::balxml::Decoder_UnknownElementContext::Decoder_UnknownElementContext() (); 0x00410ba0 mov rsi, qword [rbx] | 0x00410ba3 mov rdi, r14 | 0x00410ba6 call 0x420870 | eax = BloombergLP::balxml::Decoder_ElementContext::beginParse(BloombergLP::balxml::Decoder*) (r14, *(rbx)); 0x00410bab mov ebx, eax | ebx = eax; 0x00410bad jmp 0x410bf0 | goto label_8; | label_5: 0x00410baf mov rcx, qword [rsp + 0x28] | rcx = *((rsp + 0x28)); | label_1: 0x00410bb4 mov byte [rcx], 0 | *(rcx) = 0; 0x00410bb7 mov rsi, qword [rbx] | 0x00410bba lea rdi, [rsp + 8] | 0x00410bbf call 0x420870 | eax = BloombergLP::balxml::Decoder_ElementContext::beginParse(BloombergLP::balxml::Decoder*) (rsp + 8, *(rbx)); 0x00410bc4 mov ebx, eax | ebx = eax; 0x00410bc6 mov qword [rsp + 8], 0x49c850 | *((rsp + 8)) = vtable.BloombergLP::balxml::Decoder_ChoiceContext_BloombergLP::s_baltst::BasicSchemaChoice_.0; 0x00410bcf cmp qword [rsp + 0x48], 0x17 | | if (*((rsp + 0x48)) != 0x17) { 0x00410bd5 je 0x410be7 | 0x00410bd7 mov rsi, qword [rsp + 0x28] | rsi = *((rsp + 0x28)); 0x00410bdc mov rdi, qword [rsp + 0x50] | rdi = *((rsp + 0x50)); 0x00410be1 mov rax, qword [rdi] | rax = *(rdi); 0x00410be4 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x00410be7 mov qword [rsp + 0x40], 0xffffffffffffffff | *((rsp + 0x40)) = 0xffffffffffffffff; | label_8: 0x00410bf0 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00410bf5 call 0x422180 | BloombergLP::balxml::Decoder_ElementContext::~Decoder_ElementContext() (); | label_4: 0x00410bfa mov eax, ebx | eax = ebx; 0x00410bfc add rsp, 0x100 | 0x00410c03 pop rbx | 0x00410c04 pop r14 | 0x00410c06 pop r15 | 0x00410c08 ret | return rax; | label_6: 0x00410c09 mov rsi, qword [r14] | rsi = *(r14); 0x00410c0c mov edx, dword [rip + 0x912fe] | edx = .comment; 0x00410c12 mov rdi, rbx | rdi = rbx; 0x00410c15 add rsp, 0x100 | 0x00410c1c pop rbx | 0x00410c1d pop r14 | 0x00410c1f pop r15 | 0x00410c21 jmp 0x417540 | void (*0x417540)() (); | label_7: 0x00410c26 mov edx, dword [rip + 0x912bc] | edx = .comment; 0x00410c2c mov rdi, rbx | rdi = rbx; 0x00410c2f mov rsi, r14 | rsi = r14; 0x00410c32 add rsp, 0x100 | 0x00410c39 pop rbx | 0x00410c3a pop r14 | 0x00410c3c pop r15 | 0x00410c3e jmp 0x411230 | return void (*0x411230)() (); | }