; assembly | /* r2dec pseudo code output */ | /* baljsn_encoder.t/none @ 0x4c5990 */ | #include | ; (fcn) method.bsl::vector_BloombergLP::s_baltst::Choice3__bsl::allocator_BloombergLP::s_baltst::Choice3___.vector_bsl::vector_BloombergLP::s_baltst::Choice3__bsl::allocator_BloombergLP::s_baltst::Choice3____const__bsl::allocator_BloombergLP::s_baltst::Choice3_ () | int64_t method_bsl::vector_BloombergLP::s_baltst::Choice3_bsl::allocator_BloombergLP::s_baltst::Choice3_vector_bsl::vector_BloombergLP::s_baltst::Choice3_bsl::allocator_BloombergLP::s_baltst::Choice3_const_bsl::allocator_BloombergLP::s_baltst::Choice3_ (int64_t arg3, int64_t arg2, int64_t arg1) { | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* bsl::vector >::vector(bsl::vector > const&, bsl::allocator const&) */ 0x004c5990 push rbp | 0x004c5991 push r15 | 0x004c5993 push r14 | 0x004c5995 push r13 | 0x004c5997 push r12 | 0x004c5999 push rbx | 0x004c599a push rax | 0x004c599b mov r15, rsi | r15 = rsi; 0x004c599e mov rbx, rdi | rbx = rdi; 0x004c59a1 xorps xmm0, xmm0 | __asm ("xorps xmm0, xmm0"); 0x004c59a4 movups xmmword [rdi], xmm0 | __asm ("movups xmmword [rdi], xmm0"); 0x004c59a7 mov qword [rdi + 0x10], 0 | *((rdi + 0x10)) = 0; 0x004c59af mov rdi, qword [rdx] | rdi = *(rdx); 0x004c59b2 mov qword [rbx + 0x18], rdi | *((rbx + 0x18)) = rdi; 0x004c59b6 mov rsi, qword [rsi + 8] | rsi = *((rsi + 8)); 0x004c59ba sub rsi, qword [r15] | rsi -= *(r15); | if (rsi == 0) { 0x004c59bd je 0x4c5a4b | goto label_0; | } 0x004c59c3 mov rax, rsi | rax = rsi; 0x004c59c6 sar rax, 7 | rax >>= 7; 0x004c59ca movabs rbp, 0xaaaaaaaaaaaaaaab | 0x004c59d4 imul rbp, rax | rbp *= rax; 0x004c59d8 mov rax, qword [rdi] | rax = *(rdi); 0x004c59db call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x004c59de mov r12, rax | r12 = rax; 0x004c59e1 mov qword [rbx + 8], rax | *((rbx + 8)) = rax; 0x004c59e5 mov qword [rbx], rax | *(rbx) = rax; 0x004c59e8 mov qword [rbx + 0x10], rbp | *((rbx + 0x10)) = rbp; 0x004c59ec mov rbp, qword [r15] | rbp = *(r15); 0x004c59ef mov r14, qword [r15 + 8] | r14 = *((r15 + 8)); 0x004c59f3 cmp rbp, r14 | | if (rbp == r14) { 0x004c59f6 je 0x4c5a3e | goto label_1; | } 0x004c59f8 mov qword [rsp], rbx | *(rsp) = rbx; 0x004c59fc mov r13, qword [rbx + 0x18] | r13 = *((rbx + 0x18)); 0x004c5a00 sub r14, rbp | r14 -= rbp; 0x004c5a03 xor ebx, ebx | ebx = 0; 0x004c5a05 nop word cs:[rax + rax] | 0x004c5a0f nop | | do { 0x004c5a10 lea rsi, [rbp + rbx] | 0x004c5a15 lea rdi, [r12 + rbx] | 0x004c5a19 mov rdx, r13 | 0x004c5a1c call 0x4b8f60 | BloombergLP::s_baltst::Choice3::Choice3(BloombergLP::s_baltst::Choice3const&,BloombergLP::bslma::Allocator*) (r12 + rbx, rbp + rbx, r13); 0x004c5a21 add rbx, 0x180 | rbx += 0x180; 0x004c5a28 cmp r14, rbx | 0x004c5a2b jne 0x4c5a10 | | } while (r14 != rbx); 0x004c5a2d mov rbp, qword [r15] | rbp = *(r15); 0x004c5a30 mov rax, qword [r15 + 8] | rax = *((r15 + 8)); 0x004c5a34 mov rbx, qword [rsp] | rbx = *(rsp); 0x004c5a38 mov r12, qword [rbx + 8] | r12 = *((rbx + 8)); 0x004c5a3c jmp 0x4c5a41 | goto label_2; | label_1: 0x004c5a3e mov rax, rbp | rax = rbp; | label_2: 0x004c5a41 sub rax, rbp | rax -= rbp; 0x004c5a44 add rax, r12 | rax += r12; 0x004c5a47 mov qword [rbx + 8], rax | *((rbx + 8)) = rax; | label_0: 0x004c5a4b add rsp, 8 | 0x004c5a4f pop rbx | 0x004c5a50 pop r12 | 0x004c5a52 pop r13 | 0x004c5a54 pop r14 | 0x004c5a56 pop r15 | 0x004c5a58 pop rbp | 0x004c5a59 ret | return rax; | }