; assembly | /* r2dec pseudo code output */ | /* baljsn_encoder.t/assume @ 0x4cadd0 */ | #include | ; (fcn) method.void_BloombergLP::bslalg::ArrayPrimitives_Imp::insert_BloombergLP::s_baltst::Choice3__BloombergLP::s_baltst::Choice3_const__bsl::allocator_BloombergLP::s_baltst.Choice3____BloombergLP::s_baltst::Choice3__BloombergLP::s_baltst::Choice3__Bloomber () | int64_t method_void_BloombergLP::bslalg::ArrayPrimitives_Imp::insert_BloombergLP::s_baltst::Choice3_BloombergLP::s_baltst::Choice3_const_bsl::allocator_BloombergLP::s_baltst_Choice3_BloombergLP::s_baltst::Choice3_BloombergLP::s_baltst::Choice3_Bloomber (int64_t arg6, uint32_t arg5, int64_t arg3, int64_t arg2, int64_t arg1) { | int64_t var_8h; | int64_t var_10h_2; | int64_t var_18h; | int64_t var_20h; | int64_t var_28h; | uint32_t var_30h; | r9 = arg6; | r8 = arg5; | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* void BloombergLP::bslalg::ArrayPrimitives_Imp::insert >(BloombergLP::s_baltst::Choice3*, BloombergLP::s_baltst::Choice3*, BloombergLP::s_baltst::Choice3 const*, BloombergLP::s_baltst::Choice3 const*, unsigned long, bsl::allocator, BloombergLP::bslmf::MetaInt<1>*) */ 0x004cadd0 push rbp | 0x004cadd1 push r15 | 0x004cadd3 push r14 | 0x004cadd5 push r13 | 0x004cadd7 push r12 | 0x004cadd9 push rbx | 0x004cadda sub rsp, 0x38 | 0x004cadde mov qword [rsp + 8], r9 | *((rsp + 8)) = r9; 0x004cade3 mov qword [rsp], rdx | *(rsp) = rdx; 0x004cade7 test r8, r8 | | if (r8 == 0) { 0x004cadea je 0x4caf06 | goto label_0; | } 0x004cadf0 mov r13, rsi | r13 = rsi; 0x004cadf3 mov r15, rdi | r15 = rdi; 0x004cadf6 mov r14, rsi | r14 = rsi; 0x004cadf9 sub r14, rdi | r14 -= rdi; 0x004cadfc mov rax, r14 | rax = r14; 0x004cadff sar rax, 7 | rax >>= 7; 0x004cae03 movabs rcx, 0xaaaaaaaaaaaaaaab | rcx = 0xaaaaaaaaaaaaaaab; 0x004cae0d imul rcx, rax | rcx *= rax; 0x004cae11 cmp rcx, r8 | 0x004cae14 mov rbp, r8 | 0x004cae17 mov qword [rsp + 0x28], rcx | *((rsp + 0x28)) = rcx; | if (rcx < r8) { 0x004cae1c cmovb rbp, rcx | | } 0x004cae20 mov qword [rsp + 0x30], r8 | *((rsp + 0x30)) = r8; 0x004cae25 lea rbx, [r8 + r8*2] | rbx = r8 * 3; 0x004cae29 shl rbx, 7 | rbx <<= 7; 0x004cae2d lea r12, [rdi + rbx] | r12 = rdi + rbx; 0x004cae31 test r14, r14 | | if (r14 != 0) { 0x004cae34 je 0x4cae44 | 0x004cae36 mov rdi, r12 | 0x004cae39 mov rsi, r15 | 0x004cae3c mov rdx, r14 | 0x004cae3f call 0x405810 | memmove (r12, r15, r14); | } 0x004cae44 test rbp, rbp | | if (rbp == 0) { 0x004cae47 je 0x4caec0 | goto label_1; | } 0x004cae49 mov qword [rsp + 0x20], r14 | *((rsp + 0x20)) = r14; 0x004cae4e mov qword [rsp + 0x18], r13 | *((rsp + 0x18)) = r13; 0x004cae53 mov qword [rsp + 0x10], rbx | *((rsp + 0x10)) = rbx; 0x004cae58 lea rax, [r13 + rbx] | rax = r13 + rbx; 0x004cae5d mov rcx, rbp | rcx = rbp; 0x004cae60 neg rcx | rcx = -rcx; 0x004cae63 lea r13, [rcx + rcx*2] | r13 = rcx * 3; 0x004cae67 shl r13, 7 | r13 <<= 7; 0x004cae6b add r13, rax | r13 += rax; 0x004cae6e shl rbp, 7 | rbp <<= 7; 0x004cae72 lea r14, [rbp + rbp*2] | r14 = rbp + rbp*2; 0x004cae77 xor ebp, ebp | ebp = 0; 0x004cae79 nop dword [rax] | | do { 0x004cae80 mov rax, qword [rsp] | rax = *(rsp); 0x004cae84 lea rsi, [rax + rbp] | 0x004cae88 mov rbx, r15 | rbx = r15; 0x004cae8b add r15, rbp | r15 += rbp; 0x004cae8e mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x004cae93 mov rdx, qword [rax] | 0x004cae96 mov rdi, r15 | 0x004cae99 call 0x4b8cc0 | BloombergLP::s_baltst::Choice3::Choice3(BloombergLP::s_baltst::Choice3const&,BloombergLP::bslma::Allocator*) (r15, rax + rbp, *(rax)); 0x004cae9e add rbp, 0x180 | rbp += 0x180; 0x004caea5 cmp r14, rbp | 0x004caea8 mov r15, rbx | r15 = rbx; 0x004caeab jne 0x4cae80 | | } while (r14 != rbp); 0x004caead add qword [rsp], rbp | 0x004caeb1 mov r14, qword [rsp + 0x20] | r14 = *((rsp + 0x20)); 0x004caeb6 mov r13, qword [rsp + 0x18] | r13 = *((rsp + 0x18)); 0x004caebb mov rbx, qword [rsp + 0x10] | rbx = *((rsp + 0x10)); | label_1: 0x004caec0 mov rax, qword [rsp + 0x28] | rax = *((rsp + 0x28)); 0x004caec5 cmp rax, qword [rsp + 0x30] | | if (rax >= *((rsp + 0x30))) { 0x004caeca jae 0x4caf06 | goto label_0; | } 0x004caecc cmp r12, r13 | | if (r12 == r13) { 0x004caecf je 0x4caf06 | goto label_0; | } 0x004caed1 add rbx, r15 | rbx += r15; 0x004caed4 sub rbx, r13 | rbx -= r13; 0x004caed7 xor ebp, ebp | ebp = 0; 0x004caed9 nop dword [rax] | | do { 0x004caee0 mov rax, qword [rsp] | rax = *(rsp); 0x004caee4 lea rsi, [rax + rbp] | 0x004caee8 lea rdi, [r13 + rbp] | 0x004caeed mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x004caef2 mov rdx, qword [rax] | 0x004caef5 call 0x4b8cc0 | BloombergLP::s_baltst::Choice3::Choice3(BloombergLP::s_baltst::Choice3const&,BloombergLP::bslma::Allocator*) (r13 + rbp, rax + rbp, *(rax)); 0x004caefa add rbp, 0x180 | rbp += 0x180; 0x004caf01 cmp rbx, rbp | 0x004caf04 jne 0x4caee0 | | } while (rbx != rbp); | label_0: 0x004caf06 add rsp, 0x38 | 0x004caf0a pop rbx | 0x004caf0b pop r12 | 0x004caf0d pop r13 | 0x004caf0f pop r14 | 0x004caf11 pop r15 | 0x004caf13 pop rbp | 0x004caf14 ret | return rax; | }