; assembly | /* r2dec pseudo code output */ | /* balber_berdecoder.t/none @ 0x44ee40 */ | #include | ; (fcn) method.int_BloombergLP::balber::BerDecoder_Node::decodeChoice_BloombergLP::s_baltst.TimingRequest__BloombergLP::s_baltst::TimingRequest_ () | int64_t method_int_BloombergLP::balber::BerDecoder_Node::decodeChoice_BloombergLP::s_baltst_TimingRequest_BloombergLP::s_baltst::TimingRequest_ (int64_t arg2, int64_t arg1) { | int64_t var_8h; | uint32_t var_10h; | int64_t var_18h; | int64_t var_20h; | int64_t var_24h; | int64_t var_28h; | int64_t var_2ch; | int64_t var_30h; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::balber::BerDecoder_Node::decodeChoice(BloombergLP::s_baltst::TimingRequest*) */ 0x0044ee40 push r14 | 0x0044ee42 push rbx | 0x0044ee43 sub rsp, 0x38 | 0x0044ee47 mov r14, rsi | r14 = rsi; 0x0044ee4a mov rbx, rdi | rbx = rdi; 0x0044ee4d mov rax, qword [rdi] | rax = *(rdi); 0x0044ee50 mov qword [rsp], rax | *(rsp) = rax; 0x0044ee54 mov rcx, qword [rax + 0x118] | rcx = *((rax + 0x118)); 0x0044ee5b mov qword [rsp + 8], rcx | *((rsp + 8)) = rcx; 0x0044ee60 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0044ee63 movups xmmword [rsp + 0x10], xmm0 | __asm ("movups xmmword [rsp + 0x10], xmm0"); 0x0044ee68 movups xmmword [rsp + 0x20], xmm0 | __asm ("movups xmmword [rsp + 0x20], xmm0"); 0x0044ee6d mov qword [rsp + 0x30], 0 | *((rsp + 0x30)) = 0; 0x0044ee76 inc dword [rax + 0x110] | *((rax + 0x110))++; 0x0044ee7c test rcx, rcx | | if (rcx != 0) { 0x0044ee7f je 0x44ee88 | 0x0044ee81 mov ecx, dword [rcx + 0x2c] | ecx = *((rcx + 0x2c)); 0x0044ee84 mov dword [rsp + 0x2c], ecx | *((rsp + 0x2c)) = ecx; | } 0x0044ee88 mov rdi, rsp | 0x0044ee8b mov qword [rax + 0x118], rdi | *((rax + 0x118)) = rdi; 0x0044ee92 call 0x450990 | eax = BloombergLP::balber::BerDecoder_Node::readTagHeader() (rsp); 0x0044ee97 test eax, eax | | if (eax != 0) { 0x0044ee99 jne 0x44ef42 | goto label_1; | } 0x0044ee9f cmp dword [rsp + 0x10], 0x80 | | if (*((rsp + 0x10)) == 0x80) { 0x0044eea7 jne 0x44eed6 | 0x0044eea9 mov edi, dword [rsp + 0x18] | 0x0044eead call 0x460330 | rax = BloombergLP::s_baltst::TimingRequest::lookupSelectionInfo(int) (*((rsp + 0x18))); 0x0044eeb2 test rax, rax | | if (rax == 0) { 0x0044eeb5 je 0x44eee5 | goto label_2; | } 0x0044eeb7 mov esi, dword [rsp + 0x18] | 0x0044eebb mov rdi, r14 | 0x0044eebe call 0x460a60 | eax = BloombergLP::s_baltst::TimingRequest::makeSelection(int) (r14, *((rsp + 0x18))); 0x0044eec3 test eax, eax | | if (eax == 0) { 0x0044eec5 je 0x44ef04 | goto label_3; | } 0x0044eec7 mov rdi, rsp | 0x0044eeca mov esi, 0x49ab4f | 0x0044eecf call 0x450230 | BloombergLP::balber::BerDecoder_Node::logError(char const*) (rsp, "Unable to make choice selection"); 0x0044eed4 jmp 0x44ef42 | goto label_1; | } 0x0044eed6 mov rdi, rsp | 0x0044eed9 mov esi, 0x49ab20 | 0x0044eede call 0x450230 | BloombergLP::balber::BerDecoder_Node::logError(char const*) (rsp, "Expected CONTEXT tag class for internal choice"); 0x0044eee3 jmp 0x44ef42 | goto label_1; | label_2: 0x0044eee5 mov rdi, rsp | 0x0044eee8 call 0x450d80 | eax = BloombergLP::balber::BerDecoder_Node::skipField() (rsp); 0x0044eeed mov rcx, qword [rbx] | rcx = *(rbx); 0x0044eef0 inc dword [rcx + 0x114] | *((rcx + 0x114))++; | do { | label_0: 0x0044eef6 test eax, eax | | if (eax != 0) { 0x0044eef8 jne 0x44ef42 | goto label_1; | } 0x0044eefa mov rdi, rsp | 0x0044eefd call 0x450bd0 | BloombergLP::balber::BerDecoder_Node::readTagTrailer() (rsp); 0x0044ef02 jmp 0x44ef42 | goto label_1; | label_3: 0x0044ef04 mov ecx, dword [r14 + 0x50] | ecx = *((r14 + 0x50)); 0x0044ef08 cmp ecx, 2 | | if (ecx == 2) { 0x0044ef0b je 0x44ef74 | goto label_4; | } 0x0044ef0d cmp ecx, 1 | | if (ecx == 1) { 0x0044ef10 je 0x44ef9a | goto label_5; | } 0x0044ef16 mov eax, 0xffffffff | eax = 0xffffffff; 0x0044ef1b test ecx, ecx | | if (ecx != 0) { 0x0044ef1d jne 0x44ef42 | goto label_1; | } 0x0044ef1f mov eax, dword [rip + 0x4d7ab] | eax = .comment; 0x0044ef25 mov dword [rsp + 0x2c], eax | *((rsp + 0x2c)) = eax; 0x0044ef29 mov rax, qword [rip + 0x4d788] | rax = *(str.sqrt); 0x0044ef30 mov qword [rsp + 0x30], rax | *((rsp + 0x30)) = rax; 0x0044ef35 mov rdi, rsp | 0x0044ef38 mov rsi, r14 | 0x0044ef3b call 0x44f000 | intBloombergLP::balber::BerDecoder_Node::decode(BloombergLP::s_baltst::Sqrt*,BloombergLP::bdlat_TypeCategory::Sequence) (rsp, r14); 0x0044ef40 jmp 0x44eef6 | | } while (1); | label_1: 0x0044ef42 mov rcx, qword [rsp + 8] | rcx = *((rsp + 8)); 0x0044ef47 test rcx, rcx | | if (rcx != 0) { 0x0044ef4a je 0x44ef5b | 0x0044ef4c mov edx, dword [rsp + 0x24] | edx = *((rsp + 0x24)); 0x0044ef50 add edx, dword [rsp + 0x20] | edx += *((rsp + 0x20)); 0x0044ef54 add edx, dword [rsp + 0x28] | edx += *((rsp + 0x28)); 0x0044ef58 add dword [rcx + 0x24], edx | *((rcx + 0x24)) += edx; | } 0x0044ef5b mov rdx, qword [rsp] | rdx = *(rsp); 0x0044ef5f mov qword [rdx + 0x118], rcx | *((rdx + 0x118)) = rcx; 0x0044ef66 dec dword [rdx + 0x110] | *((rdx + 0x110))--; 0x0044ef6c add rsp, 0x38 | 0x0044ef70 pop rbx | 0x0044ef71 pop r14 | 0x0044ef73 ret | return rax; | label_4: 0x0044ef74 mov eax, dword [rip + 0x4d7a6] | eax = .comment; 0x0044ef7a mov dword [rsp + 0x2c], eax | *((rsp + 0x2c)) = eax; 0x0044ef7e mov rax, qword [rip + 0x4d783] | rax = *(0x0049c708); 0x0044ef85 mov qword [rsp + 0x30], rax | *((rsp + 0x30)) = rax; 0x0044ef8a mov rdi, rsp | 0x0044ef8d mov rsi, r14 | 0x0044ef90 call 0x44f240 | intBloombergLP::balber::BerDecoder_Node::decode(BloombergLP::s_baltst::BigRecord*,BloombergLP::bdlat_TypeCategory::Sequence) (rsp, r14); 0x0044ef95 jmp 0x44eef6 | goto label_0; | label_5: 0x0044ef9a mov eax, dword [rip + 0x4d758] | eax = .comment; 0x0044efa0 mov dword [rsp + 0x2c], eax | *((rsp + 0x2c)) = eax; 0x0044efa4 mov rax, qword [rip + 0x4d735] | rax = *(str.basic); 0x0044efab mov qword [rsp + 0x30], rax | *((rsp + 0x30)) = rax; 0x0044efb0 mov rdi, rsp | 0x0044efb3 mov rsi, r14 | 0x0044efb6 call 0x448c50 | intBloombergLP::balber::BerDecoder_Node::decode(BloombergLP::s_baltst::BasicRecord*,BloombergLP::bdlat_TypeCategory::Sequence) (rsp, r14); 0x0044efbb jmp 0x44eef6 | goto label_0; | }