; assembly | /* r2dec pseudo code output */ | /* balber_berdecoder.t/none @ 0x43af80 */ | #include | ; (fcn) method.int_BloombergLP::balber::BerDecoder::decode_BloombergLP::s_baltst.MyChoiceWithDefaultValues__std::__1::basic_streambuf_char__std::__1::char_traits_char_____BloombergLP::s_baltst::MyChoiceWithDefaultValues_ () | int64_t method_int_BloombergLP::balber::BerDecoder::decode_BloombergLP::s_baltst_MyChoiceWithDefaultValues_std::_1::basic_streambuf_char_std::_1::char_traits_char_BloombergLP::s_baltst::MyChoiceWithDefaultValues_ (uint32_t arg3, uint32_t arg2, int64_t arg1) { | int64_t var_8h; | int64_t var_10h; | uint32_t var_18h; | uint32_t var_20h; | 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::s_baltst::MyChoiceWithDefaultValues*) */ 0x0043af80 push r15 | 0x0043af82 push r14 | 0x0043af84 push rbx | 0x0043af85 sub rsp, 0x50 | 0x0043af89 mov r14, rdx | r14 = rdx; 0x0043af8c mov r15, rdi | r15 = rdi; 0x0043af8f mov qword [rdi + 0x108], rsi | *((rdi + 0x108)) = rsi; 0x0043af96 mov qword [rdi + 0x110], 0 | *((rdi + 0x110)) = 0; 0x0043afa1 mov dword [rdi + 0x100], 0 | *((rdi + 0x100)) = 0; 0x0043afab mov rbx, qword [rdi + 0xf8] | rbx = *((rdi + 0xf8)); 0x0043afb2 test rbx, rbx | | if (rbx != 0) { 0x0043afb5 je 0x43afd4 | 0x0043afb7 mov rsi, qword [rbx + 0x30] | rsi = *((rbx + 0x30)); 0x0043afbb mov rdi, qword [rbx + 0x48] | rdi = *((rbx + 0x48)); 0x0043afbf mov rax, qword [rdi] | rax = *(rdi); 0x0043afc2 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x0043afc5 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0043afc8 movups xmmword [rbx + 0x30], xmm0 | __asm ("movups xmmword [rbx + 0x30], xmm0"); 0x0043afcc mov qword [rbx + 0x40], 0 | *((rbx + 0x40)) = 0; | } 0x0043afd4 mov qword [r15 + 0x118], 0 | *((r15 + 0x118)) = 0; 0x0043afdf cmp dword [r14 + 0x30], 1 | | if (*((r14 + 0x30)) == 1) { 0x0043afe4 jne 0x43b002 | 0x0043afe6 cmp qword [r14 + 0x20], 0x17 | | if (*((r14 + 0x20)) != 0x17) { 0x0043afeb je 0x43affa | 0x0043afed mov rsi, qword [r14] | rsi = *(r14); 0x0043aff0 mov rdi, qword [r14 + 0x28] | rdi = *((r14 + 0x28)); 0x0043aff4 mov rax, qword [rdi] | rax = *(rdi); 0x0043aff7 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x0043affa mov qword [r14 + 0x18], 0xffffffffffffffff | *((r14 + 0x18)) = 0xffffffffffffffff; | } 0x0043b002 mov dword [r14 + 0x30], 0xffffffff | *((r14 + 0x30)) = 0xffffffff; 0x0043b00a cmp qword [r15], 0 | | if (*(r15) != 0) { 0x0043b00e je 0x43b084 | 0x0043b010 mov qword [rsp + 8], r15 | *((rsp + 8)) = r15; 0x0043b015 mov rax, qword [r15 + 0x118] | rax = *((r15 + 0x118)); 0x0043b01c mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0043b021 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0043b024 movups xmmword [rsp + 0x18], xmm0 | __asm ("movups xmmword [rsp + 0x18], xmm0"); 0x0043b029 movups xmmword [rsp + 0x28], xmm0 | __asm ("movups xmmword [rsp + 0x28], xmm0"); 0x0043b02e mov qword [rsp + 0x38], 0 | *((rsp + 0x38)) = 0; 0x0043b037 inc dword [r15 + 0x110] | *((r15 + 0x110))++; 0x0043b03e test rax, rax | | if (rax != 0) { 0x0043b041 je 0x43b04a | 0x0043b043 mov eax, dword [rax + 0x2c] | eax = *((rax + 0x2c)); 0x0043b046 mov dword [rsp + 0x34], eax | *((rsp + 0x34)) = eax; | } 0x0043b04a lea rdi, [rsp + 8] | 0x0043b04f mov qword [r15 + 0x118], rdi | *((r15 + 0x118)) = rdi; 0x0043b056 call 0x450990 | eax = BloombergLP::balber::BerDecoder_Node::readTagHeader() (rsp + 8); 0x0043b05b mov ecx, eax | ecx = eax; 0x0043b05d test eax, eax | | if (eax != 0) { 0x0043b05f jne 0x43b18b | goto label_0; | } 0x0043b065 cmp dword [rsp + 0x18], 0 | | if (*((rsp + 0x18)) != 0) { 0x0043b06a je 0x43b12e | 0x0043b070 lea rdi, [rsp + 8] | 0x0043b075 mov esi, 0x49a8a2 | 0x0043b07a call 0x450230 | BloombergLP::balber::BerDecoder_Node::logError(char const*) (rsp + 8, "Expected UNIVERSAL tag class"); 0x0043b07f jmp 0x43b189 | | } else { 0x0043b084 mov eax, dword [rip + 0x604f2] | eax = BloombergLP::balber::BerDecoderOptions::DEFAULT_MAX_DEPTH; 0x0043b08a mov dword [rsp + 0x40], eax | *((rsp + 0x40)) = eax; 0x0043b08e mov eax, dword [rip + 0x604f0] | eax = BloombergLP::balber::BerDecoderOptions::DEFAULT_TRACE_LEVEL; 0x0043b094 mov dword [rsp + 0x44], eax | *((rsp + 0x44)) = eax; 0x0043b098 mov eax, dword [rip + 0x604ea] | eax = BloombergLP::balber::BerDecoderOptions::DEFAULT_MAX_SEQUENCE_SIZE; 0x0043b09e mov dword [rsp + 0x48], eax | *((rsp + 0x48)) = eax; 0x0043b0a2 mov al, byte [rip + 0x604d8] | al = BloombergLP::balber::BerDecoderOptions::DEFAULT_SKIP_UNKNOWN_ELEMENTS; 0x0043b0a8 mov byte [rsp + 0x4c], al | *((rsp + 0x4c)) = al; 0x0043b0ac mov al, byte [rip + 0x604da] | al = BloombergLP::balber::BerDecoderOptions::DEFAULT_DEFAULT_EMPTY_STRINGS; 0x0043b0b2 mov byte [rsp + 0x4d], al | *((rsp + 0x4d)) = al; 0x0043b0b6 lea rax, [rsp + 0x40] | rax = rsp + 0x40; 0x0043b0bb mov qword [r15], rax | *(r15) = rax; 0x0043b0be mov qword [rsp + 8], r15 | *((rsp + 8)) = r15; 0x0043b0c3 mov rax, qword [r15 + 0x118] | rax = *((r15 + 0x118)); 0x0043b0ca mov qword [rsp + 0x10], rax | *((rsp + 0x10)) = rax; 0x0043b0cf xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x0043b0d2 movups xmmword [rsp + 0x18], xmm0 | __asm ("movups xmmword [rsp + 0x18], xmm0"); 0x0043b0d7 movups xmmword [rsp + 0x28], xmm0 | __asm ("movups xmmword [rsp + 0x28], xmm0"); 0x0043b0dc mov qword [rsp + 0x38], 0 | *((rsp + 0x38)) = 0; 0x0043b0e5 inc dword [r15 + 0x110] | *((r15 + 0x110))++; 0x0043b0ec test rax, rax | | if (rax != 0) { 0x0043b0ef je 0x43b0f8 | 0x0043b0f1 mov eax, dword [rax + 0x2c] | eax = *((rax + 0x2c)); 0x0043b0f4 mov dword [rsp + 0x34], eax | *((rsp + 0x34)) = eax; | } 0x0043b0f8 lea rdi, [rsp + 8] | 0x0043b0fd mov qword [r15 + 0x118], rdi | *((r15 + 0x118)) = rdi; 0x0043b104 call 0x450990 | eax = BloombergLP::balber::BerDecoder_Node::readTagHeader() (rsp + 8); 0x0043b109 mov ecx, eax | ecx = eax; 0x0043b10b test eax, eax | | if (eax != 0) { 0x0043b10d jne 0x43b1c9 | goto label_1; | } 0x0043b113 cmp dword [rsp + 0x18], 0 | | if (*((rsp + 0x18)) == 0) { 0x0043b118 je 0x43b154 | goto label_2; | } 0x0043b11a lea rdi, [rsp + 8] | 0x0043b11f mov esi, 0x49a8a2 | 0x0043b124 call 0x450230 | BloombergLP::balber::BerDecoder_Node::logError(char const*) (rsp + 8, "Expected UNIVERSAL tag class"); 0x0043b129 jmp 0x43b1c7 | goto label_3; | } 0x0043b12e cmp dword [rsp + 0x20], 0x10 | | if (*((rsp + 0x20)) == 0x10) { 0x0043b133 jne 0x43b17a | 0x0043b135 lea rdi, [rsp + 8] | 0x0043b13a mov rsi, r14 | 0x0043b13d call 0x4456e0 | eax = intBloombergLP::balber::BerDecoder_Node::decode(BloombergLP::s_baltst::MyChoiceWithDefaultValues*,BloombergLP::bdlat_TypeCategory::Choice) (rsp + 8, r14); 0x0043b142 mov ecx, eax | ecx = eax; 0x0043b144 test eax, eax | | if (eax != 0) { 0x0043b146 jne 0x43b18b | goto label_0; | } 0x0043b148 lea rdi, [rsp + 8] | 0x0043b14d call 0x450bd0 | BloombergLP::balber::BerDecoder_Node::readTagTrailer() (rsp + 8); 0x0043b152 jmp 0x43b189 | goto label_4; | label_2: 0x0043b154 cmp dword [rsp + 0x20], 0x10 | | if (*((rsp + 0x20)) != 0x10) { 0x0043b159 jne 0x43b1b8 | goto label_5; | } 0x0043b15b lea rdi, [rsp + 8] | 0x0043b160 mov rsi, r14 | 0x0043b163 call 0x4456e0 | eax = intBloombergLP::balber::BerDecoder_Node::decode(BloombergLP::s_baltst::MyChoiceWithDefaultValues*,BloombergLP::bdlat_TypeCategory::Choice) (rsp + 8, r14); 0x0043b168 mov ecx, eax | ecx = eax; 0x0043b16a test eax, eax | | if (eax != 0) { 0x0043b16c jne 0x43b1c9 | goto label_1; | } 0x0043b16e lea rdi, [rsp + 8] | 0x0043b173 call 0x450bd0 | BloombergLP::balber::BerDecoder_Node::readTagTrailer() (rsp + 8); 0x0043b178 jmp 0x43b1c7 | goto label_3; | } 0x0043b17a lea rdi, [rsp + 8] | 0x0043b17f mov esi, 0x49a8bf | 0x0043b184 call 0x450230 | eax = BloombergLP::balber::BerDecoder_Node::logError(char const*) (rsp + 8, "Unexpected tag number"); | } | label_4: 0x0043b189 mov ecx, eax | ecx = eax; | label_0: 0x0043b18b mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x0043b190 test rax, rax | | if (rax != 0) { 0x0043b193 je 0x43b1a4 | 0x0043b195 mov edx, dword [rsp + 0x2c] | edx = *((rsp + 0x2c)); 0x0043b199 add edx, dword [rsp + 0x28] | edx += *((rsp + 0x28)); 0x0043b19d add edx, dword [rsp + 0x30] | edx += *((rsp + 0x30)); 0x0043b1a1 add dword [rax + 0x24], edx | *((rax + 0x24)) += edx; | } 0x0043b1a4 mov rdx, qword [rsp + 8] | rdx = *((rsp + 8)); 0x0043b1a9 mov qword [rdx + 0x118], rax | *((rdx + 0x118)) = rax; 0x0043b1b0 dec dword [rdx + 0x110] | *((rdx + 0x110))--; 0x0043b1b6 jmp 0x43b1fb | goto label_6; | label_5: 0x0043b1b8 lea rdi, [rsp + 8] | 0x0043b1bd mov esi, 0x49a8bf | 0x0043b1c2 call 0x450230 | eax = BloombergLP::balber::BerDecoder_Node::logError(char const*) (rsp + 8, "Unexpected tag number"); | label_3: 0x0043b1c7 mov ecx, eax | ecx = eax; | label_1: 0x0043b1c9 mov rax, qword [rsp + 0x10] | rax = *((rsp + 0x10)); 0x0043b1ce test rax, rax | | if (rax != 0) { 0x0043b1d1 je 0x43b1e2 | 0x0043b1d3 mov edx, dword [rsp + 0x2c] | edx = *((rsp + 0x2c)); 0x0043b1d7 add edx, dword [rsp + 0x28] | edx += *((rsp + 0x28)); 0x0043b1db add edx, dword [rsp + 0x30] | edx += *((rsp + 0x30)); 0x0043b1df add dword [rax + 0x24], edx | *((rax + 0x24)) += edx; | } 0x0043b1e2 mov rdx, qword [rsp + 8] | rdx = *((rsp + 8)); 0x0043b1e7 mov qword [rdx + 0x118], rax | *((rdx + 0x118)) = rax; 0x0043b1ee dec dword [rdx + 0x110] | *((rdx + 0x110))--; 0x0043b1f4 mov qword [r15], 0 | *(r15) = 0; | label_6: 0x0043b1fb mov qword [r15 + 0x108], 0 | *((r15 + 0x108)) = 0; 0x0043b206 mov eax, ecx | eax = ecx; 0x0043b208 add rsp, 0x50 | 0x0043b20c pop rbx | 0x0043b20d pop r14 | 0x0043b20f pop r15 | 0x0043b211 ret | return rax; | }