; assembly | /* r2dec pseudo code output */ | /* balber_berdecoder.t/assume @ 0x44ee80 */ | #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*) */ 0x0044ee80 push r14 | 0x0044ee82 push rbx | 0x0044ee83 sub rsp, 0x38 | 0x0044ee87 mov r14, rsi | r14 = rsi; 0x0044ee8a mov rbx, rdi | rbx = rdi; 0x0044ee8d mov rax, qword [rdi] | rax = *(rdi); 0x0044ee90 mov qword [rsp], rax | *(rsp) = rax; 0x0044ee94 mov rcx, qword [rax + 0x118] | rcx = *((rax + 0x118)); 0x0044ee9b mov qword [rsp + 8], rcx | *((rsp + 8)) = rcx; 0x0044eea0 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0044eea3 movups xmmword [rsp + 0x10], xmm0 | __asm ("movups xmmword [rsp + 0x10], xmm0"); 0x0044eea8 movups xmmword [rsp + 0x20], xmm0 | __asm ("movups xmmword [rsp + 0x20], xmm0"); 0x0044eead mov qword [rsp + 0x30], 0 | *((rsp + 0x30)) = 0; 0x0044eeb6 inc dword [rax + 0x110] | *((rax + 0x110))++; 0x0044eebc test rcx, rcx | | if (rcx != 0) { 0x0044eebf je 0x44eec8 | 0x0044eec1 mov ecx, dword [rcx + 0x2c] | ecx = *((rcx + 0x2c)); 0x0044eec4 mov dword [rsp + 0x2c], ecx | *((rsp + 0x2c)) = ecx; | } 0x0044eec8 mov rdi, rsp | 0x0044eecb mov qword [rax + 0x118], rdi | *((rax + 0x118)) = rdi; 0x0044eed2 call 0x4509e0 | eax = BloombergLP::balber::BerDecoder_Node::readTagHeader() (rsp); 0x0044eed7 mov ecx, eax | ecx = eax; 0x0044eed9 test eax, eax | | if (eax != 0) { 0x0044eedb jne 0x44ef23 | goto label_0; | } 0x0044eedd cmp dword [rsp + 0x10], 0x80 | | if (*((rsp + 0x10)) == 0x80) { 0x0044eee5 jne 0x44ef14 | 0x0044eee7 mov edi, dword [rsp + 0x18] | 0x0044eeeb call 0x460460 | rax = BloombergLP::s_baltst::TimingRequest::lookupSelectionInfo(int) (*((rsp + 0x18))); 0x0044eef0 test rax, rax | | if (rax == 0) { 0x0044eef3 je 0x44ef57 | goto label_2; | } 0x0044eef5 mov esi, dword [rsp + 0x18] | 0x0044eef9 mov rdi, r14 | 0x0044eefc call 0x460b90 | eax = BloombergLP::s_baltst::TimingRequest::makeSelection(int) (r14, *((rsp + 0x18))); 0x0044ef01 test eax, eax | | if (eax == 0) { 0x0044ef03 je 0x44ef73 | goto label_3; | } 0x0044ef05 mov rdi, rsp | 0x0044ef08 mov esi, 0x49a77b | 0x0044ef0d call 0x450280 | BloombergLP::balber::BerDecoder_Node::logError(char const*) (rsp, "Unable to make choice selection"); 0x0044ef12 jmp 0x44ef21 | | } else { 0x0044ef14 mov rdi, rsp | 0x0044ef17 mov esi, 0x49a74c | 0x0044ef1c call 0x450280 | eax = BloombergLP::balber::BerDecoder_Node::logError(char const*) (rsp, "Expected CONTEXT tag class for internal choice"); | } | label_1: 0x0044ef21 mov ecx, eax | ecx = eax; | do { | label_0: 0x0044ef23 mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x0044ef28 test rax, rax | | if (rax != 0) { 0x0044ef2b je 0x44ef3c | 0x0044ef2d mov edx, dword [rsp + 0x24] | edx = *((rsp + 0x24)); 0x0044ef31 add edx, dword [rsp + 0x20] | edx += *((rsp + 0x20)); 0x0044ef35 add edx, dword [rsp + 0x28] | edx += *((rsp + 0x28)); 0x0044ef39 add dword [rax + 0x24], edx | *((rax + 0x24)) += edx; | } 0x0044ef3c mov rdx, qword [rsp] | rdx = *(rsp); 0x0044ef40 mov qword [rdx + 0x118], rax | *((rdx + 0x118)) = rax; 0x0044ef47 dec dword [rdx + 0x110] | *((rdx + 0x110))--; 0x0044ef4d mov eax, ecx | eax = ecx; 0x0044ef4f add rsp, 0x38 | 0x0044ef53 pop rbx | 0x0044ef54 pop r14 | 0x0044ef56 ret | return rax; | label_2: 0x0044ef57 mov rdi, rsp | 0x0044ef5a call 0x450dd0 | eax = BloombergLP::balber::BerDecoder_Node::skipField() (rsp); 0x0044ef5f mov ecx, eax | ecx = eax; 0x0044ef61 mov rax, qword [rbx] | rax = *(rbx); 0x0044ef64 inc dword [rax + 0x114] | *((rax + 0x114))++; 0x0044ef6a test ecx, ecx | 0x0044ef6c jne 0x44ef23 | | } while (ecx != 0); 0x0044ef6e jmp 0x44eff6 | goto label_4; | label_3: 0x0044ef73 mov eax, dword [r14 + 0x50] | eax = *((r14 + 0x50)); 0x0044ef77 cmp eax, 2 | | if (eax != 2) { 0x0044ef7a je 0x44efa8 | 0x0044ef7c cmp eax, 1 | | if (eax != 1) { 0x0044ef7f je 0x44efcb | 0x0044ef81 test eax, eax | | if (eax != 0) { 0x0044ef83 jne 0x44f003 | goto label_5; | } 0x0044ef85 mov eax, dword [rip + 0x4d375] | eax = .comment; 0x0044ef8b mov dword [rsp + 0x2c], eax | *((rsp + 0x2c)) = eax; 0x0044ef8f mov rax, qword [rip + 0x4d352] | rax = *(str.sqrt); 0x0044ef96 mov qword [rsp + 0x30], rax | *((rsp + 0x30)) = rax; 0x0044ef9b mov rdi, rsp | 0x0044ef9e mov rsi, r14 | 0x0044efa1 call 0x44f050 | intBloombergLP::balber::BerDecoder_Node::decode(BloombergLP::s_baltst::Sqrt*,BloombergLP::bdlat_TypeCategory::Sequence) (rsp, r14); 0x0044efa6 jmp 0x44efec | 0x0044efa8 mov eax, dword [rip + 0x4d3a2] | eax = .comment; 0x0044efae mov dword [rsp + 0x2c], eax | *((rsp + 0x2c)) = eax; 0x0044efb2 mov rax, qword [rip + 0x4d37f] | rax = *(0x0049c338); 0x0044efb9 mov qword [rsp + 0x30], rax | *((rsp + 0x30)) = rax; 0x0044efbe mov rdi, rsp | 0x0044efc1 mov rsi, r14 | 0x0044efc4 call 0x44f290 | intBloombergLP::balber::BerDecoder_Node::decode(BloombergLP::s_baltst::BigRecord*,BloombergLP::bdlat_TypeCategory::Sequence) (rsp, r14); 0x0044efc9 jmp 0x44efec | | } else { | } else { 0x0044efcb mov eax, dword [rip + 0x4d357] | eax = .comment; 0x0044efd1 mov dword [rsp + 0x2c], eax | *((rsp + 0x2c)) = eax; 0x0044efd5 mov rax, qword [rip + 0x4d334] | rax = *(str.basic); 0x0044efdc mov qword [rsp + 0x30], rax | *((rsp + 0x30)) = rax; 0x0044efe1 mov rdi, rsp | 0x0044efe4 mov rsi, r14 | 0x0044efe7 call 0x448d40 | eax = intBloombergLP::balber::BerDecoder_Node::decode(BloombergLP::s_baltst::BasicRecord*,BloombergLP::bdlat_TypeCategory::Sequence) (rsp, r14); | } | } 0x0044efec mov ecx, eax | ecx = eax; 0x0044efee test ecx, ecx | | if (ecx != 0) { 0x0044eff0 jne 0x44ef23 | goto label_0; | } | label_4: 0x0044eff6 mov rdi, rsp | 0x0044eff9 call 0x450c20 | BloombergLP::balber::BerDecoder_Node::readTagTrailer() (rsp); 0x0044effe jmp 0x44ef21 | goto label_1; | label_5: 0x0044f003 mov ecx, 0xffffffff | ecx = 0xffffffff; 0x0044f008 jmp 0x44ef23 | goto label_0; | }