; assembly | /* r2dec pseudo code output */ | /* balber_berdecoder.t/assume @ 0x43c060 */ | #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_20h; | int64_t var_24h; | int64_t var_28h; | int64_t var_2ch; | int64_t var_30h; | int64_t var_38h; | int64_t var_3ch; | int64_t var_40h; | int64_t var_44h; | int64_t var_45h; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* int BloombergLP::balber::BerDecoder::decode >(std::__1::basic_streambuf >*, BloombergLP::bdlb::Variant2*) */ 0x0043c060 push r15 | 0x0043c062 push r14 | 0x0043c064 push r12 | 0x0043c066 push rbx | 0x0043c067 sub rsp, 0x48 | 0x0043c06b mov r14, rdx | r14 = rdx; 0x0043c06e mov r12, rdi | r12 = rdi; 0x0043c071 mov qword [rdi + 0x108], rsi | *((rdi + 0x108)) = rsi; 0x0043c078 mov qword [rdi + 0x110], 0 | *((rdi + 0x110)) = 0; 0x0043c083 mov dword [rdi + 0x100], 0 | *((rdi + 0x100)) = 0; 0x0043c08d mov rbx, qword [rdi + 0xf8] | rbx = *((rdi + 0xf8)); 0x0043c094 test rbx, rbx | | if (rbx != 0) { 0x0043c097 je 0x43c0b6 | 0x0043c099 mov rsi, qword [rbx + 0x30] | rsi = *((rbx + 0x30)); 0x0043c09d mov rdi, qword [rbx + 0x48] | rdi = *((rbx + 0x48)); 0x0043c0a1 mov rax, qword [rdi] | rax = *(rdi); 0x0043c0a4 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0043c0a7 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0043c0aa movups xmmword [rbx + 0x30], xmm0 | __asm ("movups xmmword [rbx + 0x30], xmm0"); 0x0043c0ae mov qword [rbx + 0x40], 0 | *((rbx + 0x40)) = 0; | } 0x0043c0b6 mov qword [r12 + 0x118], 0 | *((r12 + 0x118)) = 0; 0x0043c0c2 mov dword [rsp + 8], 0 | *((rsp + 8)) = 0; 0x0043c0ca mov r15, rsp | r15 = rsp; 0x0043c0cd mov rdi, r14 | 0x0043c0d0 mov rsi, r15 | 0x0043c0d3 call 0x446f00 | BloombergLP::bdlb::VariantImp>::operator=(BloombergLP::bdlb::VariantImp>&&) (r14, r15); 0x0043c0d8 cmp qword [r12], 0 | | if (*(r12) != 0) { 0x0043c0dd je 0x43c15c | 0x0043c0df mov qword [rsp], r12 | *(rsp) = r12; 0x0043c0e3 mov rax, qword [r12 + 0x118] | rax = *((r12 + 0x118)); 0x0043c0eb mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x0043c0f0 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0043c0f3 movups xmmword [rsp + 0x10], xmm0 | __asm ("movups xmmword [rsp + 0x10], xmm0"); 0x0043c0f8 movups xmmword [rsp + 0x20], xmm0 | __asm ("movups xmmword [rsp + 0x20], xmm0"); 0x0043c0fd mov qword [rsp + 0x30], 0 | *((rsp + 0x30)) = 0; 0x0043c106 inc dword [r12 + 0x110] | *((r12 + 0x110))++; 0x0043c10e test rax, rax | | if (rax != 0) { 0x0043c111 je 0x43c11a | 0x0043c113 mov eax, dword [rax + 0x2c] | eax = *((rax + 0x2c)); 0x0043c116 mov dword [rsp + 0x2c], eax | *((rsp + 0x2c)) = eax; | } 0x0043c11a mov qword [r12 + 0x118], r15 | *((r12 + 0x118)) = r15; 0x0043c122 mov rdi, r15 | 0x0043c125 mov rsi, r14 | 0x0043c128 call 0x446da0 | intBloombergLP::balber::BerDecoder_UniversalElementVisitor::operator()>(BloombergLP::bdlb::Variant2*) (r15, r14); 0x0043c12d mov rcx, qword [rsp + 8] | rcx = *((rsp + 8)); 0x0043c132 test rcx, rcx | | if (rcx != 0) { 0x0043c135 je 0x43c146 | 0x0043c137 mov edx, dword [rsp + 0x24] | edx = *((rsp + 0x24)); 0x0043c13b add edx, dword [rsp + 0x20] | edx += *((rsp + 0x20)); 0x0043c13f add edx, dword [rsp + 0x28] | edx += *((rsp + 0x28)); 0x0043c143 add dword [rcx + 0x24], edx | *((rcx + 0x24)) += edx; | } 0x0043c146 mov rdx, qword [rsp] | rdx = *(rsp); 0x0043c14a mov qword [rdx + 0x118], rcx | *((rdx + 0x118)) = rcx; 0x0043c151 dec dword [rdx + 0x110] | *((rdx + 0x110))--; 0x0043c157 jmp 0x43c217 | | } else { 0x0043c15c mov eax, dword [rip + 0x5f04a] | eax = BloombergLP::balber::BerDecoderOptions::DEFAULT_MAX_DEPTH; 0x0043c162 mov dword [rsp + 0x38], eax | *((rsp + 0x38)) = eax; 0x0043c166 mov eax, dword [rip + 0x5f048] | eax = BloombergLP::balber::BerDecoderOptions::DEFAULT_TRACE_LEVEL; 0x0043c16c mov dword [rsp + 0x3c], eax | *((rsp + 0x3c)) = eax; 0x0043c170 mov eax, dword [rip + 0x5f042] | eax = BloombergLP::balber::BerDecoderOptions::DEFAULT_MAX_SEQUENCE_SIZE; 0x0043c176 mov dword [rsp + 0x40], eax | *((rsp + 0x40)) = eax; 0x0043c17a mov al, byte [rip + 0x5f030] | al = BloombergLP::balber::BerDecoderOptions::DEFAULT_SKIP_UNKNOWN_ELEMENTS; 0x0043c180 mov byte [rsp + 0x44], al | *((rsp + 0x44)) = al; 0x0043c184 mov al, byte [rip + 0x5f032] | al = BloombergLP::balber::BerDecoderOptions::DEFAULT_DEFAULT_EMPTY_STRINGS; 0x0043c18a mov byte [rsp + 0x45], al | *((rsp + 0x45)) = al; 0x0043c18e lea rax, [rsp + 0x38] | rax = rsp + 0x38; 0x0043c193 mov qword [r12], rax | *(r12) = rax; 0x0043c197 mov qword [rsp], r12 | *(rsp) = r12; 0x0043c19b mov rax, qword [r12 + 0x118] | rax = *((r12 + 0x118)); 0x0043c1a3 mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x0043c1a8 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0043c1ab movups xmmword [rsp + 0x10], xmm0 | __asm ("movups xmmword [rsp + 0x10], xmm0"); 0x0043c1b0 movups xmmword [rsp + 0x20], xmm0 | __asm ("movups xmmword [rsp + 0x20], xmm0"); 0x0043c1b5 mov qword [rsp + 0x30], 0 | *((rsp + 0x30)) = 0; 0x0043c1be inc dword [r12 + 0x110] | *((r12 + 0x110))++; 0x0043c1c6 test rax, rax | | if (rax != 0) { 0x0043c1c9 je 0x43c1d2 | 0x0043c1cb mov eax, dword [rax + 0x2c] | eax = *((rax + 0x2c)); 0x0043c1ce mov dword [rsp + 0x2c], eax | *((rsp + 0x2c)) = eax; | } 0x0043c1d2 mov qword [r12 + 0x118], r15 | *((r12 + 0x118)) = r15; 0x0043c1da mov rdi, r15 | 0x0043c1dd mov rsi, r14 | 0x0043c1e0 call 0x446da0 | intBloombergLP::balber::BerDecoder_UniversalElementVisitor::operator()>(BloombergLP::bdlb::Variant2*) (r15, r14); 0x0043c1e5 mov rcx, qword [rsp + 8] | rcx = *((rsp + 8)); 0x0043c1ea test rcx, rcx | | if (rcx != 0) { 0x0043c1ed je 0x43c1fe | 0x0043c1ef mov edx, dword [rsp + 0x24] | edx = *((rsp + 0x24)); 0x0043c1f3 add edx, dword [rsp + 0x20] | edx += *((rsp + 0x20)); 0x0043c1f7 add edx, dword [rsp + 0x28] | edx += *((rsp + 0x28)); 0x0043c1fb add dword [rcx + 0x24], edx | *((rcx + 0x24)) += edx; | } 0x0043c1fe mov rdx, qword [rsp] | rdx = *(rsp); 0x0043c202 mov qword [rdx + 0x118], rcx | *((rdx + 0x118)) = rcx; 0x0043c209 dec dword [rdx + 0x110] | *((rdx + 0x110))--; 0x0043c20f mov qword [r12], 0 | *(r12) = 0; | } 0x0043c217 mov qword [r12 + 0x108], 0 | *((r12 + 0x108)) = 0; 0x0043c223 add rsp, 0x48 | 0x0043c227 pop rbx | 0x0043c228 pop r12 | 0x0043c22a pop r14 | 0x0043c22c pop r15 | 0x0043c22e ret | return rax; | }