; assembly | /* r2dec pseudo code output */ | /* baljsn_decoder.t/none @ 0x44def0 */ | #include | ; (fcn) method.int_BloombergLP::balxml::Decoder_ParseObject::executeImp_BloombergLP::balb.SequenceWithAnonymityChoice2__BloombergLP::balb::SequenceWithAnonymityChoice2__int__BloombergLP::bdlat_TypeCategory::Choice_ () | int64_t method_int_BloombergLP::balxml::Decoder_ParseObject::executeImp_BloombergLP::balb_SequenceWithAnonymityChoice2_BloombergLP::balb::SequenceWithAnonymityChoice2_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::balb::SequenceWithAnonymityChoice2*, int, BloombergLP::bdlat_TypeCategory::Choice) */ 0x0044def0 push rbp | 0x0044def1 push r14 | 0x0044def3 push rbx | 0x0044def4 sub rsp, 0x100 | 0x0044defb mov r14, rsi | r14 = rsi; 0x0044defe mov rbx, rdi | rbx = rdi; 0x0044df01 test edx, 0x10000 | | if ((edx & 0x10000) == 0) { 0x0044df07 jne 0x44df55 | 0x0044df09 mov qword [rsp + 8], 0x619758 | *((rsp + 8)) = vtable.BloombergLP::balxml::Decoder_ChoiceContext_BloombergLP::balb::SequenceWithAnonymityChoice2_.0; 0x0044df12 mov byte [rsp + 0x10], 0 | *((rsp + 0x10)) = 0; 0x0044df17 mov qword [rsp + 0x18], r14 | *((rsp + 0x18)) = r14; 0x0044df1c mov byte [rsp + 0x20], 0 | *((rsp + 0x20)) = 0; 0x0044df21 mov qword [rsp + 0x28], 0 | *((rsp + 0x28)) = 0; 0x0044df2a movaps xmm0, xmmword [rip + 0xa46cf] | xmm0 = .comment; 0x0044df31 movups xmmword [rsp + 0x40], xmm0 | __asm ("movups xmmword [rsp + 0x40], xmm0"); 0x0044df36 mov rax, qword [rip + 0x43cbab] | rax = BloombergLP::bslma::Default::s_defaultAllocator; 0x0044df3d test rax, rax | | if (rax != 0) { 0x0044df40 je 0x44e036 | 0x0044df46 mov qword [rsp + 0x50], rax | *((rsp + 0x50)) = rax; 0x0044df4b lea rcx, [rsp + 0x28] | rcx = rsp + 0x28; 0x0044df50 jmp 0x44e0af | | } else { 0x0044df55 mov rax, qword [rbx] | rax = *(rbx); 0x0044df58 mov rax, qword [rax] | rax = *(rax); 0x0044df5b cmp byte [rax + 8], 0 | | if (*((rax + 8)) != 0) { 0x0044df5f je 0x44df76 | 0x0044df61 mov rdi, qword [rbx + 8] | 0x0044df65 mov esi, dword [rbx + 0x10] | 0x0044df68 call 0x46bbe0 | rax = BloombergLP::balb::SequenceWithAnonymityChoice2::lookupSelectionInfo(char const*,int) (*((rbx + 8)), *((rbx + 0x10))); 0x0044df6d test rax, rax | | if (rax == 0) { 0x0044df70 je 0x44e085 | goto label_0; | } | } 0x0044df76 mov rsi, qword [rbx + 8] | 0x0044df7a mov edx, dword [rbx + 0x10] | 0x0044df7d mov rdi, r14 | 0x0044df80 call 0x46c090 | eax = BloombergLP::balb::SequenceWithAnonymityChoice2::makeSelection(char const*,int) (r14, *((rbx + 8)), *((rbx + 0x10))); 0x0044df85 test eax, eax | | if (eax == 0) { 0x0044df87 je 0x44e04f | goto label_1; | } 0x0044df8d mov rbp, qword [rbx] | rbp = *(rbx); 0x0044df90 mov rsi, qword [rbp + 0x2d0] | 0x0044df97 lea r14, [rsp + 8] | r14 = rsp + 8; 0x0044df9c mov rdi, r14 | 0x0044df9f call 0x418ba0 | BloombergLP::balxml::Decoder::MemOutStream::MemOutStream(BloombergLP::bslma::Allocator*) (r14, *((rbp + 0x2d0))); 0x0044dfa4 mov dword [rsp + 0xf0], 2 | *((rsp + 0xf0)) = 2; 0x0044dfaf mov qword [rsp + 0xf8], rbp | *((rsp + 0xf8)) = rbp; 0x0044dfb7 mov esi, 0x613360 | 0x0044dfbc mov edx, 0x1b | 0x0044dfc1 mov rdi, r14 | 0x0044dfc4 call 0x417b80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (r14, "Unable to make selection: \", 0x1b); 0x0044dfc9 mov rbp, rax | 0x0044dfcc mov rbx, qword [rbx + 8] | rbx = *((rbx + 8)); 0x0044dfd0 mov rdi, rbx | 0x0044dfd3 call 0x405eb0 | rax = strlen (*((rbx + 8))); 0x0044dfd8 mov rdi, rbp | 0x0044dfdb mov rsi, rbx | 0x0044dfde mov rdx, rax | 0x0044dfe1 call 0x417b80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rbp, rbx, rax); 0x0044dfe6 mov esi, 0x61337c | 0x0044dfeb mov edx, 2 | 0x0044dff0 mov rdi, rax | 0x0044dff3 call 0x417b80 | rax = std::_1::basic_ostream>&std::_1::_put_character_sequence>(std::_1::basic_ostream>&,char const*,unsigned long) (rax, 0x61337c, 2); 0x0044dff8 mov rdi, rax | rdi = rax; 0x0044dffb call 0x406230 | std::_1::basic_ostream>::flush() (); 0x0044e000 mov rdi, qword [rsp + 0xf8] | 0x0044e008 mov esi, dword [rsp + 0xf0] | 0x0044e00f mov rdx, qword [rsp + 0x38] | 0x0044e014 mov eax, dword [rsp + 0x40] | eax = *((rsp + 0x40)); 0x0044e018 sub eax, edx | eax -= edx; 0x0044e01a movsxd rcx, eax | rcx = (int64_t) eax; 0x0044e01d call 0x4781d0 | BloombergLP::balxml::Decoder::setDecoderError(BloombergLP::balxml::ErrorInfo::Severity,std::_1::basic_string_view>) (*((rsp + 0xf8)), *((rsp + 0xf0)), *((rsp + 0x38)), rcx); 0x0044e022 lea rdi, [rsp + 8] | 0x0044e027 call 0x477790 | BloombergLP::balxml::Decoder::MemOutStream::~MemOutStream() (rsp + 8); 0x0044e02c mov ebp, 0xffffffff | 0x0044e031 jmp 0x44e0f5 | goto label_2; | } 0x0044e036 call 0x4cb3c0 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x0044e03b cmp qword [rsp + 0x48], 0x17 | 0x0044e041 mov qword [rsp + 0x50], rax | *((rsp + 0x50)) = rax; | if (*((rsp + 0x48)) == 0x17) { 0x0044e046 jne 0x44e0aa | 0x0044e048 lea rcx, [rsp + 0x28] | rcx = rsp + 0x28; 0x0044e04d jmp 0x44e0af | goto label_3; | label_1: 0x0044e04f mov eax, dword [r14 + 8] | eax = *((r14 + 8)); 0x0044e053 cmp eax, 1 | | if (eax == 1) { 0x0044e056 je 0x44e103 | goto label_4; | } 0x0044e05c mov ebp, 0xffffffff | 0x0044e061 test eax, eax | | if (eax != 0) { 0x0044e063 jne 0x44e0f5 | goto label_2; | } 0x0044e069 mov rsi, qword [r14] | rsi = *(r14); 0x0044e06c mov edx, dword [rip + 0x1cd2ce] | edx = .comment; 0x0044e072 mov rdi, rbx | rdi = rbx; 0x0044e075 add rsp, 0x100 | 0x0044e07c pop rbx | 0x0044e07d pop r14 | 0x0044e07f pop rbp | 0x0044e080 jmp 0x427fc0 | void (*0x427fc0)() (); | label_0: 0x0044e085 mov rax, qword [rbx] | rax = *(rbx); 0x0044e088 inc dword [rax + 0x410] | *((rax + 0x410))++; 0x0044e08e lea rbp, [rsp + 8] | rbp = rsp + 8; 0x0044e093 mov rdi, rbp | rdi = rbp; 0x0044e096 call 0x4785d0 | BloombergLP::balxml::Decoder_UnknownElementContext::Decoder_UnknownElementContext() (); 0x0044e09b mov rsi, qword [rbx] | 0x0044e09e mov rdi, rbp | 0x0044e0a1 call 0x477100 | eax = BloombergLP::balxml::Decoder_ElementContext::beginParse(BloombergLP::balxml::Decoder*) (rbp, *(rbx)); 0x0044e0a6 mov ebp, eax | 0x0044e0a8 jmp 0x44e0eb | goto label_5; | } 0x0044e0aa mov rcx, qword [rsp + 0x28] | rcx = *((rsp + 0x28)); | } | label_3: 0x0044e0af mov byte [rcx], 0 | *(rcx) = 0; 0x0044e0b2 mov rsi, qword [rbx] | 0x0044e0b5 lea rdi, [rsp + 8] | 0x0044e0ba call 0x477100 | eax = BloombergLP::balxml::Decoder_ElementContext::beginParse(BloombergLP::balxml::Decoder*) (rsp + 8, *(rbx)); 0x0044e0bf mov ebp, eax | 0x0044e0c1 mov qword [rsp + 8], 0x619758 | *((rsp + 8)) = vtable.BloombergLP::balxml::Decoder_ChoiceContext_BloombergLP::balb::SequenceWithAnonymityChoice2_.0; 0x0044e0ca cmp qword [rsp + 0x48], 0x17 | | if (*((rsp + 0x48)) != 0x17) { 0x0044e0d0 je 0x44e0e2 | 0x0044e0d2 mov rsi, qword [rsp + 0x28] | rsi = *((rsp + 0x28)); 0x0044e0d7 mov rdi, qword [rsp + 0x50] | rdi = *((rsp + 0x50)); 0x0044e0dc mov rax, qword [rdi] | rax = *(rdi); 0x0044e0df call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x0044e0e2 mov qword [rsp + 0x40], 0xffffffffffffffff | *((rsp + 0x40)) = 0xffffffffffffffff; | label_5: 0x0044e0eb lea rdi, [rsp + 8] | rdi = rsp + 8; 0x0044e0f0 call 0x478a00 | BloombergLP::balxml::Decoder_ElementContext::~Decoder_ElementContext() (); | label_2: 0x0044e0f5 mov eax, ebp | eax = ebp; 0x0044e0f7 add rsp, 0x100 | 0x0044e0fe pop rbx | 0x0044e0ff pop r14 | 0x0044e101 pop rbp | 0x0044e102 ret | return rax; | label_4: 0x0044e103 mov rsi, qword [r14] | rsi = *(r14); 0x0044e106 mov edx, dword [rip + 0x1cd25c] | edx = .comment; 0x0044e10c mov rdi, rbx | rdi = rbx; 0x0044e10f add rsp, 0x100 | 0x0044e116 pop rbx | 0x0044e117 pop r14 | 0x0044e119 pop rbp | 0x0044e11a jmp 0x444520 | return void (*0x444520)() (); | }