; assembly | /* r2dec pseudo code output */ | /* balber_berdecoder.t/none @ 0x43c040 */ | #include | ; (fcn) method.int_BloombergLP::balber::BerDecoder::decode_BloombergLP::bdlb::Variant2_BloombergLP::bdlt::Date__BloombergLP::bdlt.DateTz____std::__1::basic_streambuf_char__std::__1::char_traits_char_____BloombergLP::bdlb::Variant2_BloombergLP::bdlt::Date__Bloom () | int64_t method_int_BloombergLP::balber::BerDecoder::decode_BloombergLP::bdlb::Variant2_BloombergLP::bdlt::Date_BloombergLP::bdlt_DateTz_std::_1::basic_streambuf_char_std::_1::char_traits_char_BloombergLP::bdlb::Variant2_BloombergLP::bdlt::Date_Bloom (uint32_t arg3, int64_t arg2, int64_t arg1) { | int64_t var_8h; | int64_t var_10h; | int64_t var_18h; | int64_t var_28h; | int64_t var_2ch; | int64_t var_30h; | int64_t var_34h; | int64_t var_38h; | int64_t var_40h; | int64_t var_44h; | int64_t var_48h; | int64_t var_4ch; | int64_t var_4dh; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::balber::BerDecoder::decode >(std::__1::basic_streambuf >*, BloombergLP::bdlb::Variant2*) */ 0x0043c040 push r15 | 0x0043c042 push r14 | 0x0043c044 push rbx | 0x0043c045 sub rsp, 0x50 | 0x0043c049 mov r14, rdx | r14 = rdx; 0x0043c04c mov r15, rdi | r15 = rdi; 0x0043c04f mov qword [rdi + 0x108], rsi | *((rdi + 0x108)) = rsi; 0x0043c056 mov qword [rdi + 0x110], 0 | *((rdi + 0x110)) = 0; 0x0043c061 mov dword [rdi + 0x100], 0 | *((rdi + 0x100)) = 0; 0x0043c06b mov rbx, qword [rdi + 0xf8] | rbx = *((rdi + 0xf8)); 0x0043c072 test rbx, rbx | | if (rbx != 0) { 0x0043c075 je 0x43c094 | 0x0043c077 mov rsi, qword [rbx + 0x30] | rsi = *((rbx + 0x30)); 0x0043c07b mov rdi, qword [rbx + 0x48] | rdi = *((rbx + 0x48)); 0x0043c07f mov rax, qword [rdi] | rax = *(rdi); 0x0043c082 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0043c085 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0043c088 movups xmmword [rbx + 0x30], xmm0 | __asm ("movups xmmword [rbx + 0x30], xmm0"); 0x0043c08c mov qword [rbx + 0x40], 0 | *((rbx + 0x40)) = 0; | } 0x0043c094 mov qword [r15 + 0x118], 0 | *((r15 + 0x118)) = 0; 0x0043c09f cmp dword [r14 + 8], 0 | | if (*((r14 + 8)) != 0) { 0x0043c0a4 je 0x43c0ae | 0x0043c0a6 mov dword [r14 + 8], 0 | *((r14 + 8)) = 0; | } 0x0043c0ae cmp qword [r15], 0 | | if (*(r15) != 0) { 0x0043c0b2 je 0x43c132 | 0x0043c0b4 mov qword [rsp + 8], r15 | *((rsp + 8)) = r15; 0x0043c0b9 mov rax, qword [r15 + 0x118] | rax = *((r15 + 0x118)); 0x0043c0c0 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0043c0c5 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0043c0c8 movups xmmword [rsp + 0x18], xmm0 | __asm ("movups xmmword [rsp + 0x18], xmm0"); 0x0043c0cd movups xmmword [rsp + 0x28], xmm0 | __asm ("movups xmmword [rsp + 0x28], xmm0"); 0x0043c0d2 mov qword [rsp + 0x38], 0 | *((rsp + 0x38)) = 0; 0x0043c0db inc dword [r15 + 0x110] | *((r15 + 0x110))++; 0x0043c0e2 test rax, rax | | if (rax != 0) { 0x0043c0e5 je 0x43c0ee | 0x0043c0e7 mov eax, dword [rax + 0x2c] | eax = *((rax + 0x2c)); 0x0043c0ea mov dword [rsp + 0x34], eax | *((rsp + 0x34)) = eax; | } 0x0043c0ee lea rdi, [rsp + 8] | 0x0043c0f3 mov qword [r15 + 0x118], rdi | *((r15 + 0x118)) = rdi; 0x0043c0fa mov rsi, r14 | 0x0043c0fd call 0x446d10 | intBloombergLP::balber::BerDecoder_UniversalElementVisitor::operator()>(BloombergLP::bdlb::Variant2*) (rsp + 8, r14); 0x0043c102 mov rcx, qword [rsp + 0x10] | rcx = *((rsp + 0x10)); 0x0043c107 test rcx, rcx | | if (rcx != 0) { 0x0043c10a je 0x43c11b | 0x0043c10c mov edx, dword [rsp + 0x2c] | edx = *((rsp + 0x2c)); 0x0043c110 add edx, dword [rsp + 0x28] | edx += *((rsp + 0x28)); 0x0043c114 add edx, dword [rsp + 0x30] | edx += *((rsp + 0x30)); 0x0043c118 add dword [rcx + 0x24], edx | *((rcx + 0x24)) += edx; | } 0x0043c11b mov rdx, qword [rsp + 8] | rdx = *((rsp + 8)); 0x0043c120 mov qword [rdx + 0x118], rcx | *((rdx + 0x118)) = rcx; 0x0043c127 dec dword [rdx + 0x110] | *((rdx + 0x110))--; 0x0043c12d jmp 0x43c1ec | | } else { 0x0043c132 mov eax, dword [rip + 0x5f444] | eax = BloombergLP::balber::BerDecoderOptions::DEFAULT_MAX_DEPTH; 0x0043c138 mov dword [rsp + 0x40], eax | *((rsp + 0x40)) = eax; 0x0043c13c mov eax, dword [rip + 0x5f442] | eax = BloombergLP::balber::BerDecoderOptions::DEFAULT_TRACE_LEVEL; 0x0043c142 mov dword [rsp + 0x44], eax | *((rsp + 0x44)) = eax; 0x0043c146 mov eax, dword [rip + 0x5f43c] | eax = BloombergLP::balber::BerDecoderOptions::DEFAULT_MAX_SEQUENCE_SIZE; 0x0043c14c mov dword [rsp + 0x48], eax | *((rsp + 0x48)) = eax; 0x0043c150 mov al, byte [rip + 0x5f42a] | al = BloombergLP::balber::BerDecoderOptions::DEFAULT_SKIP_UNKNOWN_ELEMENTS; 0x0043c156 mov byte [rsp + 0x4c], al | *((rsp + 0x4c)) = al; 0x0043c15a mov al, byte [rip + 0x5f42c] | al = BloombergLP::balber::BerDecoderOptions::DEFAULT_DEFAULT_EMPTY_STRINGS; 0x0043c160 mov byte [rsp + 0x4d], al | *((rsp + 0x4d)) = al; 0x0043c164 lea rax, [rsp + 0x40] | rax = rsp + 0x40; 0x0043c169 mov qword [r15], rax | *(r15) = rax; 0x0043c16c mov qword [rsp + 8], r15 | *((rsp + 8)) = r15; 0x0043c171 mov rax, qword [r15 + 0x118] | rax = *((r15 + 0x118)); 0x0043c178 mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0043c17d xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0043c180 movups xmmword [rsp + 0x18], xmm0 | __asm ("movups xmmword [rsp + 0x18], xmm0"); 0x0043c185 movups xmmword [rsp + 0x28], xmm0 | __asm ("movups xmmword [rsp + 0x28], xmm0"); 0x0043c18a mov qword [rsp + 0x38], 0 | *((rsp + 0x38)) = 0; 0x0043c193 inc dword [r15 + 0x110] | *((r15 + 0x110))++; 0x0043c19a test rax, rax | | if (rax != 0) { 0x0043c19d je 0x43c1a6 | 0x0043c19f mov eax, dword [rax + 0x2c] | eax = *((rax + 0x2c)); 0x0043c1a2 mov dword [rsp + 0x34], eax | *((rsp + 0x34)) = eax; | } 0x0043c1a6 lea rdi, [rsp + 8] | 0x0043c1ab mov qword [r15 + 0x118], rdi | *((r15 + 0x118)) = rdi; 0x0043c1b2 mov rsi, r14 | 0x0043c1b5 call 0x446d10 | intBloombergLP::balber::BerDecoder_UniversalElementVisitor::operator()>(BloombergLP::bdlb::Variant2*) (rsp + 8, r14); 0x0043c1ba mov rcx, qword [rsp + 0x10] | rcx = *((rsp + 0x10)); 0x0043c1bf test rcx, rcx | | if (rcx != 0) { 0x0043c1c2 je 0x43c1d3 | 0x0043c1c4 mov edx, dword [rsp + 0x2c] | edx = *((rsp + 0x2c)); 0x0043c1c8 add edx, dword [rsp + 0x28] | edx += *((rsp + 0x28)); 0x0043c1cc add edx, dword [rsp + 0x30] | edx += *((rsp + 0x30)); 0x0043c1d0 add dword [rcx + 0x24], edx | *((rcx + 0x24)) += edx; | } 0x0043c1d3 mov rdx, qword [rsp + 8] | rdx = *((rsp + 8)); 0x0043c1d8 mov qword [rdx + 0x118], rcx | *((rdx + 0x118)) = rcx; 0x0043c1df dec dword [rdx + 0x110] | *((rdx + 0x110))--; 0x0043c1e5 mov qword [r15], 0 | *(r15) = 0; | } 0x0043c1ec mov qword [r15 + 0x108], 0 | *((r15 + 0x108)) = 0; 0x0043c1f7 add rsp, 0x50 | 0x0043c1fb pop rbx | 0x0043c1fc pop r14 | 0x0043c1fe pop r15 | 0x0043c200 ret | return rax; | }