; assembly | /* r2dec pseudo code output */ | /* baljsn_encoder.t/assume @ 0x4bb3f0 */ | #include | ; (fcn) method.BloombergLP::s_baltst::Sequence1.operator_BloombergLP::s_baltst::Sequence1_const_ () | int64_t method_BloombergLP::s_baltst::Sequence1_operator_BloombergLP::s_baltst::Sequence1_const_ (uint32_t arg2, uint32_t arg1) { | int64_t var_8h; | int64_t var_10h; | int64_t var_18h; | int64_t var_20h; | rsi = arg2; | rdi = arg1; | /* BloombergLP::s_baltst::Sequence1::operator=(BloombergLP::s_baltst::Sequence1 const&) */ 0x004bb3f0 push rbp | 0x004bb3f1 push r15 | 0x004bb3f3 push r14 | 0x004bb3f5 push r13 | 0x004bb3f7 push r12 | 0x004bb3f9 push rbx | 0x004bb3fa sub rsp, 0x28 | 0x004bb3fe mov r15, rdi | r15 = rdi; 0x004bb401 cmp rdi, rsi | | if (rdi == rsi) { 0x004bb404 je 0x4bb5e3 | goto label_1; | } 0x004bb40a mov r14, rsi | r14 = rsi; 0x004bb40d lea rdi, [r15 + 0x68] | rdi = r15 + 0x68; 0x004bb411 cmp byte [rsi + 0x1e8], 0 | 0x004bb418 mov al, byte [r15 + 0x1e8] | al = *((r15 + 0x1e8)); | if (*((rsi + 0x1e8)) != 0) { 0x004bb41f je 0x4bb430 | 0x004bb421 lea rsi, [r14 + 0x68] | rsi = r14 + 0x68; 0x004bb425 test al, al | | if (al != 0) { 0x004bb427 je 0x4bb457 | 0x004bb429 call 0x4b9040 | al = BloombergLP::s_baltst::Choice3::operator=(BloombergLP::s_baltst::Choice3const&) (rdi, rsi); 0x004bb42e jmp 0x4bb49e | | } else { 0x004bb430 test al, al | | if (al == 0) { 0x004bb432 je 0x4bb49e | goto label_2; | } 0x004bb434 mov byte [r15 + 0x1e8], 0 | *((r15 + 0x1e8)) = 0; 0x004bb43c mov eax, dword [r15 + 0x1d8] | eax = *((r15 + 0x1d8)); 0x004bb443 cmp rax, 3 | | if (rax > 3) { 0x004bb447 ja 0x4bb493 | goto label_3; | } | /* switch table (4 cases) at 0x648fe8 */ 0x004bb449 jmp qword [rax*8 + 0x648fe8] | 0x004bb450 call 0x4c4a50 | BloombergLP::s_baltst::Sequence6::~Sequence6() (rdi); 0x004bb455 jmp 0x4bb493 | | } else { 0x004bb457 mov rdx, qword [r15 + 0x1f0] | 0x004bb45e call 0x4b8cc0 | BloombergLP::s_baltst::Choice3::Choice3(BloombergLP::s_baltst::Choice3const&,BloombergLP::bslma::Allocator*) (rdi, rsi, *((r15 + 0x1f0))); 0x004bb463 mov byte [r15 + 0x1e8], 1 | *((r15 + 0x1e8)) = 1; 0x004bb46b jmp 0x4bb49e | goto label_2; 0x004bb46d cmp qword [r15 + 0x88], 0x17 | | if (*((r15 + 0x88)) != 0x17) { 0x004bb475 je 0x4bb488 | 0x004bb477 mov rsi, qword [r15 + 0x68] | rsi = *((r15 + 0x68)); 0x004bb47b mov rdi, qword [r15 + 0x90] | rdi = *((r15 + 0x90)); 0x004bb482 mov rax, qword [rdi] | rax = *(rdi); 0x004bb485 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x004bb488 mov qword [r15 + 0x80], 0xffffffffffffffff | *((r15 + 0x80)) = 0xffffffffffffffff; | } | label_3: 0x004bb493 mov dword [r15 + 0x1d8], 0xffffffff | *((r15 + 0x1d8)) = 0xffffffff; | } | label_2: 0x004bb49e lea r12, [r15 + 0x48] | r12 = r15 + 0x48; 0x004bb4a2 mov rbx, qword [r15 + 0x48] | rbx = *((r15 + 0x48)); 0x004bb4a6 mov r13, qword [r15 + 0x50] | r13 = *((r15 + 0x50)); 0x004bb4aa cmp r13, rbx | | if (r13 != rbx) { 0x004bb4ad je 0x4bb4d3 | 0x004bb4af mov rax, qword [r15 + 0x60] | rax = *((r15 + 0x60)); 0x004bb4b3 mov qword [rsp + 0x20], rax | *((rsp + 0x20)) = rax; 0x004bb4b8 lea rdx, [rsp + 0x20] | rdx = rsp + 0x20; 0x004bb4bd mov rdi, rbx | 0x004bb4c0 mov rsi, r13 | 0x004bb4c3 call 0x4c9aa0 | voidBloombergLP::bslalg::ArrayDestructionPrimitives::destroy>(BloombergLP::s_baltst::Choice1*,BloombergLP::s_baltst::Choice1*,bsl::allocator,bsl::integral_constant) (rbx, r13); 0x004bb4c8 sub rbx, r13 | rbx -= r13; 0x004bb4cb add qword [r15 + 0x50], rbx | *((r15 + 0x50)) += rbx; 0x004bb4cf mov r13, qword [r15 + 0x48] | r13 = *((r15 + 0x48)); | } 0x004bb4d3 mov rdx, qword [r14 + 0x48] | 0x004bb4d7 mov rcx, qword [r14 + 0x50] | 0x004bb4db lea r8, [rsp + 8] | r8 = rsp + 8; 0x004bb4e0 mov rdi, r12 | 0x004bb4e3 mov rsi, r13 | 0x004bb4e6 call 0x4ca060 | voidbsl::vector>::privateInsert(BloombergLP::s_baltst::Choice1const*,BloombergLP::s_baltst::Choice1const*,BloombergLP::s_baltst::Choice1const*,std::_1::forward_iterator_tagconst&) (r12, r13, *((r14 + 0x48)), *((r14 + 0x50))); 0x004bb4eb mov rsi, qword [r14 + 0x1f8] | 0x004bb4f2 mov rdi, qword [r15 + 0x1f8] | 0x004bb4f9 call 0x4b79f0 | rax = BloombergLP::s_baltst::Choice2::operator=(BloombergLP::s_baltst::Choice2const&) (*((r15 + 0x1f8)), *((r14 + 0x1f8))); 0x004bb4fe lea r12, [r15 + 8] | r12 = r15 + 8; 0x004bb502 mov rbp, qword [r15 + 8] | rbp = *((r15 + 8)); 0x004bb506 mov r13, qword [r15 + 0x10] | r13 = *((r15 + 0x10)); 0x004bb50a cmp r13, rbp | | if (r13 == rbp) { 0x004bb50d je 0x4bb53c | goto label_4; | } 0x004bb50f mov rbx, rbp | rbx = rbp; 0x004bb512 nop word cs:[rax + rax] | 0x004bb51c nop dword [rax] | | do { 0x004bb520 mov rdi, rbx | 0x004bb523 call 0x4c98b0 | BloombergLP::bslstl::Optional_DataImp::reset() (rbx); 0x004bb528 add rbx, 0x28 | rbx += 0x28; 0x004bb52c cmp r13, rbx | 0x004bb52f jne 0x4bb520 | | } while (r13 != rbx); 0x004bb531 sub rbp, r13 | rbp -= r13; 0x004bb534 add qword [r15 + 0x10], rbp | *((r15 + 0x10)) += rbp; 0x004bb538 mov r13, qword [r15 + 8] | r13 = *((r15 + 8)); | label_4: 0x004bb53c mov rdx, qword [r14 + 8] | 0x004bb540 mov rcx, qword [r14 + 0x10] | 0x004bb544 lea r8, [rsp + 0x10] | r8 = rsp + 0x10; 0x004bb549 mov rdi, r12 | 0x004bb54c mov rsi, r13 | 0x004bb54f call 0x4ca5c0 | voidbsl::vector,bsl::allocator>>::privateInsertconst*>(BloombergLP::bdlb::NullableValueconst*,BloombergLP::bdlb::NullableValueconst*,BloombergLP::bdlb::NullableValueconst*,std::_1::forward_iterator_tagconst&) (r12, r13, *((r14 + 8)), *((r14 + 0x10))); 0x004bb554 mov r13, qword [r15 + 0x28] | r13 = *((r15 + 0x28)); 0x004bb558 mov r12, qword [r15 + 0x30] | r12 = *((r15 + 0x30)); 0x004bb55c cmp r12, r13 | | if (r12 == r13) { 0x004bb55f je 0x4bb5ca | goto label_5; | } 0x004bb561 mov rbx, r13 | rbx = r13; 0x004bb564 jmp 0x4bb58e | goto label_6; 0x004bb570 mov rdi, rbx | 0x004bb573 call 0x4c4a50 | BloombergLP::s_baltst::Sequence6::~Sequence6() (rbx); | do { | label_0: 0x004bb578 mov dword [rbx + 0x170], 0xffffffff | *((rbx + 0x170)) = 0xffffffff; 0x004bb582 add rbx, 0x180 | rbx += 0x180; 0x004bb589 cmp r12, rbx | | if (r12 == rbx) { 0x004bb58c je 0x4bb5bf | goto label_7; | } | label_6: 0x004bb58e mov eax, dword [rbx + 0x170] | eax = *((rbx + 0x170)); 0x004bb594 cmp rax, 3 | 0x004bb598 ja 0x4bb578 | | } while (rax > 3); | /* switch table (4 cases) at 0x649008 */ 0x004bb59a jmp qword [rax*8 + 0x649008] | 0x004bb5a1 cmp qword [rbx + 0x20], 0x17 | | if (*((rbx + 0x20)) != 0x17) { 0x004bb5a6 je 0x4bb5b5 | 0x004bb5a8 mov rsi, qword [rbx] | rsi = *(rbx); 0x004bb5ab mov rdi, qword [rbx + 0x28] | rdi = *((rbx + 0x28)); 0x004bb5af mov rax, qword [rdi] | rax = *(rdi); 0x004bb5b2 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x004bb5b5 mov qword [rbx + 0x18], 0xffffffffffffffff | *((rbx + 0x18)) = 0xffffffffffffffff; 0x004bb5bd jmp 0x4bb578 | goto label_0; | label_7: 0x004bb5bf sub r13, r12 | r13 -= r12; 0x004bb5c2 add qword [r15 + 0x30], r13 | *((r15 + 0x30)) += r13; 0x004bb5c6 mov r12, qword [r15 + 0x28] | r12 = *((r15 + 0x28)); | label_5: 0x004bb5ca lea rdi, [r15 + 0x28] | 0x004bb5ce mov rdx, qword [r14 + 0x28] | 0x004bb5d2 mov rcx, qword [r14 + 0x30] | 0x004bb5d6 lea r8, [rsp + 0x18] | r8 = rsp + 0x18; 0x004bb5db mov rsi, r12 | 0x004bb5de call 0x4caae0 | voidbsl::vector>::privateInsert(BloombergLP::s_baltst::Choice3const*,BloombergLP::s_baltst::Choice3const*,BloombergLP::s_baltst::Choice3const*,std::_1::forward_iterator_tagconst&) (r15 + 0x28, r12, *((r14 + 0x28)), *((r14 + 0x30))); | label_1: 0x004bb5e3 mov rax, r15 | rax = r15; 0x004bb5e6 add rsp, 0x28 | 0x004bb5ea pop rbx | 0x004bb5eb pop r12 | 0x004bb5ed pop r13 | 0x004bb5ef pop r14 | 0x004bb5f1 pop r15 | 0x004bb5f3 pop rbp | 0x004bb5f4 ret | return rax; | }