; assembly | /* r2dec pseudo code output */ | /* balxml_configschema.t/assume @ 0x412bd0 */ | #include | ; (fcn) method.int_BloombergLP::balxml::Decoder_ParseObject::executeImp_BloombergLP::s_baltst.BasicSchemaEnumerationElementChoice__BloombergLP::s_baltst::BasicSchemaEnumerationElementChoice__int__BloombergLP::bdlat_TypeCategory::Choice_ () | int64_t method_int_BloombergLP::balxml::Decoder_ParseObject::executeImp_BloombergLP::s_baltst_BasicSchemaEnumerationElementChoice_BloombergLP::s_baltst::BasicSchemaEnumerationElementChoice_int_BloombergLP::bdlat_TypeCategory::Choice_ (int64_t arg3, int64_t arg2, int64_t arg1) { | int64_t var_8h_3; | int64_t var_10h_2; | int64_t var_18h; | int64_t var_20h; | int64_t var_28h_2; | int64_t var_38h; | int64_t var_40h; | uint32_t var_48h; | int64_t var_50h; | int64_t var_28h; | int64_t var_30h; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::balxml::Decoder_ParseObject::executeImp(BloombergLP::s_baltst::BasicSchemaEnumerationElementChoice*, int, BloombergLP::bdlat_TypeCategory::Choice) */ 0x00412bd0 push r15 | 0x00412bd2 push r14 | 0x00412bd4 push rbx | 0x00412bd5 sub rsp, 0x100 | 0x00412bdc mov r14, rsi | r14 = rsi; 0x00412bdf mov rbx, rdi | rbx = rdi; 0x00412be2 test edx, 0x10000 | | if ((edx & 0x10000) == 0) { 0x00412be8 jne 0x412c36 | 0x00412bea mov qword [rsp + 8], 0x49ae28 | *((rsp + 8)) = vtable.BloombergLP::balxml::Decoder_ChoiceContext_BloombergLP::s_baltst::BasicSchemaEnumerationElementChoice_.0; 0x00412bf3 mov byte [rsp + 0x10], 0 | *((rsp + 0x10)) = 0; 0x00412bf8 mov qword [rsp + 0x18], r14 | *((rsp + 0x18)) = r14; 0x00412bfd mov byte [rsp + 0x20], 0 | *((rsp + 0x20)) = 0; 0x00412c02 mov qword [rsp + 0x28], 0 | *((rsp + 0x28)) = 0; 0x00412c0b movaps xmm0, xmmword [rip + 0x86e7e] | xmm0 = .comment; 0x00412c12 movups xmmword [rsp + 0x40], xmm0 | __asm ("movups xmmword [rsp + 0x40], xmm0"); 0x00412c17 mov rax, qword [rip + 0x2cd4e2] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x00412c1e test rax, rax | | if (rax != 0) { 0x00412c21 je 0x412d0f | 0x00412c27 mov qword [rsp + 0x50], rax | *((rsp + 0x50)) = rax; 0x00412c2c lea rcx, [rsp + 0x28] | rcx = rsp + 0x28; 0x00412c31 jmp 0x412d64 | | } else { 0x00412c36 mov rax, qword [rbx] | rax = *(rbx); 0x00412c39 mov rax, qword [rax] | rax = *(rax); 0x00412c3c cmp byte [rax + 8], 0 | | if (*((rax + 8)) != 0) { 0x00412c40 je 0x412c57 | 0x00412c42 mov rdi, qword [rbx + 8] | 0x00412c46 mov esi, dword [rbx + 0x10] | 0x00412c49 call 0x42fb40 | rax = BloombergLP::s_baltst::BasicSchemaEnumerationElementChoice::lookupSelectionInfo(char const*,int) (*((rbx + 8)), *((rbx + 0x10))); 0x00412c4e test rax, rax | | if (rax == 0) { 0x00412c51 je 0x412d3a | goto label_0; | } | } 0x00412c57 mov rsi, qword [rbx + 8] | 0x00412c5b mov edx, dword [rbx + 0x10] | 0x00412c5e mov rdi, r14 | 0x00412c61 call 0x430150 | eax = BloombergLP::s_baltst::BasicSchemaEnumerationElementChoice::makeSelection(char const*,int) (r14, *((rbx + 8)), *((rbx + 0x10))); 0x00412c66 test eax, eax | | if (eax != 0) { 0x00412c68 je 0x412d28 | 0x00412c6e mov r15, qword [rbx] | r15 = *(rbx); 0x00412c71 mov rsi, qword [r15 + 0x2d0] | 0x00412c78 lea r14, [rsp + 8] | r14 = rsp + 8; 0x00412c7d mov rdi, r14 | 0x00412c80 call 0x40edc0 | BloombergLP::balxml::Decoder::MemOutStream::MemOutStream(BloombergLP::bslma::Allocator*) (r14, *((r15 + 0x2d0))); 0x00412c85 mov dword [rsp + 0xf0], 2 | *((rsp + 0xf0)) = 2; 0x00412c90 mov qword [rsp + 0xf8], r15 | *((rsp + 0xf8)) = r15; 0x00412c98 mov esi, 0x49a6e9 | 0x00412c9d mov edx, 0x1b | 0x00412ca2 mov rdi, r14 | 0x00412ca5 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); 0x00412caa mov r14, rax | r14 = rax; 0x00412cad mov rbx, qword [rbx + 8] | rbx = *((rbx + 8)); 0x00412cb1 mov rdi, rbx | 0x00412cb4 call 0x404740 | rax = strlen (*((rbx + 8))); 0x00412cb9 mov rdi, r14 | 0x00412cbc mov rsi, rbx | 0x00412cbf mov rdx, rax | 0x00412cc2 call 0x40daf0 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (r14, rbx, rax); 0x00412cc7 mov esi, 0x49a5ef | 0x00412ccc mov edx, 2 | 0x00412cd1 mov rdi, rax | 0x00412cd4 call 0x40daf0 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, 0x49a5ef, 2); 0x00412cd9 mov rdi, rax | rdi = rax; 0x00412cdc call 0x4049b0 | std::_1::basic_ostream>::flush() (); 0x00412ce1 mov rdi, qword [rsp + 0xf8] | 0x00412ce9 mov esi, dword [rsp + 0xf0] | 0x00412cf0 mov rdx, qword [rsp + 0x38] | 0x00412cf5 mov eax, dword [rsp + 0x40] | eax = *((rsp + 0x40)); 0x00412cf9 sub eax, edx | eax -= edx; 0x00412cfb movsxd rcx, eax | rcx = (int64_t) eax; 0x00412cfe call 0x421940 | BloombergLP::balxml::Decoder::setDecoderError(BloombergLP::balxml::ErrorInfo::Severity,std::_1::basic_string_view>) (*((rsp + 0xf8)), *((rsp + 0xf0)), *((rsp + 0x38)), rcx); 0x00412d03 lea rdi, [rsp + 8] | 0x00412d08 call 0x420f00 | BloombergLP::balxml::Decoder::MemOutStream::~MemOutStream() (rsp + 8); 0x00412d0d jmp 0x412d33 | | } else { 0x00412d0f call 0x474010 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00412d14 cmp qword [rsp + 0x48], 0x17 | 0x00412d1a mov qword [rsp + 0x50], rax | *((rsp + 0x50)) = rax; | if (*((rsp + 0x48)) != 0x17) { 0x00412d1f jne 0x412d5f | goto label_1; | } 0x00412d21 lea rcx, [rsp + 0x28] | rcx = rsp + 0x28; 0x00412d26 jmp 0x412d64 | goto label_2; | } 0x00412d28 cmp dword [r14 + 0x40], 0 | | if (*((r14 + 0x40)) == 0) { 0x00412d2d je 0x412db9 | goto label_3; | } | } 0x00412d33 mov ebx, 0xffffffff | ebx = 0xffffffff; 0x00412d38 jmp 0x412daa | goto label_4; | label_0: 0x00412d3a mov rax, qword [rbx] | rax = *(rbx); 0x00412d3d inc dword [rax + 0x410] | *((rax + 0x410))++; 0x00412d43 lea r14, [rsp + 8] | r14 = rsp + 8; 0x00412d48 mov rdi, r14 | rdi = r14; 0x00412d4b call 0x421d50 | BloombergLP::balxml::Decoder_UnknownElementContext::Decoder_UnknownElementContext() (); 0x00412d50 mov rsi, qword [rbx] | 0x00412d53 mov rdi, r14 | 0x00412d56 call 0x420870 | eax = BloombergLP::balxml::Decoder_ElementContext::beginParse(BloombergLP::balxml::Decoder*) (r14, *(rbx)); 0x00412d5b mov ebx, eax | ebx = eax; 0x00412d5d jmp 0x412da0 | goto label_5; | label_1: 0x00412d5f mov rcx, qword [rsp + 0x28] | rcx = *((rsp + 0x28)); | } | label_2: 0x00412d64 mov byte [rcx], 0 | *(rcx) = 0; 0x00412d67 mov rsi, qword [rbx] | 0x00412d6a lea rdi, [rsp + 8] | 0x00412d6f call 0x420870 | eax = BloombergLP::balxml::Decoder_ElementContext::beginParse(BloombergLP::balxml::Decoder*) (rsp + 8, *(rbx)); 0x00412d74 mov ebx, eax | ebx = eax; 0x00412d76 mov qword [rsp + 8], 0x49ae28 | *((rsp + 8)) = vtable.BloombergLP::balxml::Decoder_ChoiceContext_BloombergLP::s_baltst::BasicSchemaEnumerationElementChoice_.0; 0x00412d7f cmp qword [rsp + 0x48], 0x17 | | if (*((rsp + 0x48)) != 0x17) { 0x00412d85 je 0x412d97 | 0x00412d87 mov rsi, qword [rsp + 0x28] | rsi = *((rsp + 0x28)); 0x00412d8c mov rdi, qword [rsp + 0x50] | rdi = *((rsp + 0x50)); 0x00412d91 mov rax, qword [rdi] | rax = *(rdi); 0x00412d94 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x00412d97 mov qword [rsp + 0x40], 0xffffffffffffffff | *((rsp + 0x40)) = 0xffffffffffffffff; | label_5: 0x00412da0 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00412da5 call 0x422180 | BloombergLP::balxml::Decoder_ElementContext::~Decoder_ElementContext() (); | label_4: 0x00412daa mov eax, ebx | eax = ebx; 0x00412dac add rsp, 0x100 | 0x00412db3 pop rbx | 0x00412db4 pop r14 | 0x00412db6 pop r15 | 0x00412db8 ret | return rax; | label_3: 0x00412db9 mov edx, dword [rip + 0x8e931] | edx = .comment; 0x00412dbf mov rdi, rbx | rdi = rbx; 0x00412dc2 mov rsi, r14 | rsi = r14; 0x00412dc5 add rsp, 0x100 | 0x00412dcc pop rbx | 0x00412dcd pop r14 | 0x00412dcf pop r15 | 0x00412dd1 jmp 0x410d30 | return void (*0x410d30)() (); | }