// File: /workspace/github_cpp_makefile_star2_O2/canzarlab[P]Trajan/./Eigen/src/LU/FullPivLU.h
// Function: void Eigen::FullPivLU<Eigen::Matrix<double, -1, -1, 0, -1, -1>>::_solve_impl<Eigen::CwiseNullaryOp<Eigen::internal::scalar_identity_op<double>, Eigen::Matrix<double, -1, -1, 0, -1, -1>>, Eigen::Matrix<double, -1, -1, 0, -1, -1>>(Eigen::CwiseNullaryOp<Eigen::internal::scalar_identity_op<double>, Eigen::Matrix<double, -1, -1, 0, -1, -1>> const&, Eigen::Matrix<double, -1, -1, 0, -1, -1>&) const
void FullPivLU<_MatrixType>::_solve_impl(const RhsType &rhs, DstType &dst) const
{
  /* The decomposition PAQ = LU can be rewritten as A = P^{-1} L U Q^{-1}.
  * So we proceed as follows:
  * Step 1: compute c = P * rhs.
  * Step 2: replace c by the solution x to Lx = c. Exists because L is invertible.
  * Step 3: replace c by the solution x to Ux = c. May or may not exist.
  * Step 4: result = Q * c;
  */

  const Index rows = this->rows(),
              cols = this->cols(),
              nonzero_pivots = this->rank();
  eigen_assert(rhs.rows() == rows);
  const Index smalldim = (std::min)(rows, cols);

  if(nonzero_pivots == 0)
  {
    dst.setZero();
    return;
  }

  typename RhsType::PlainObject c(rhs.rows(), rhs.cols());

  // Step 1
  c = permutationP() * rhs;

  // Step 2
  m_lu.topLeftCorner(smalldim,smalldim)
      .template triangularView<UnitLower>()
      .solveInPlace(c.topRows(smalldim));
  if(rows>cols)
    c.bottomRows(rows-cols) -= m_lu.bottomRows(rows-cols) * c.topRows(cols);

  // Step 3
  m_lu.topLeftCorner(nonzero_pivots, nonzero_pivots)
      .template triangularView<Upper>()
      .solveInPlace(c.topRows(nonzero_pivots));

  // Step 4
  for(Index i = 0; i < nonzero_pivots; ++i)
    dst.row(permutationQ().indices().coeff(i)) = c.row(i);
  for(Index i = nonzero_pivots; i < m_lu.cols(); ++i)
    dst.row(permutationQ().indices().coeff(i)).setZero();
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x148, %rsp            # imm = 0x148
movq %rdx, 0x8(%rsp)
movq %rsi, %rbx
movq %rdi, %r14
movq 0x8(%rdi), %r12
movq 0x10(%rdi), %r13
callq 0x1c320
cmpq %r12, (%rbx)
jne 0x1c2d8
movq %rax, %rbp
cmpq %r12, %r13
movq %r12, %r15
cmovlq %r13, %r15
testq %rax, %rax
je 0x1c2bd
leaq 0x60(%rsp), %rsi
movq %r12, (%rsi)
movq 0x8(%rbx), %rax
leaq 0x28(%rsp), %rdx
movq %rax, (%rdx)
leaq 0x10(%rsp), %rdi
callq 0x13306
movq %r14, %rdi
callq 0x1c3b4
leaq 0x60(%rsp), %rdi
movq %rax, %rsi
movq %rbx, %rdx
callq 0x1c500
leaq 0x10(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x1c532
leaq 0x28(%rsp), %rdi
movq %r14, %rsi
movq %r15, %rdx
movq %r15, %rcx
callq 0x1c3e2
movq 0x58(%rsp), %rax
movq %rax, 0x90(%rsp)
movups 0x28(%rsp), %xmm0
movups 0x38(%rsp), %xmm1
movups 0x48(%rsp), %xmm2
movaps %xmm2, 0x80(%rsp)
movaps %xmm1, 0x70(%rsp)
movaps %xmm0, 0x60(%rsp)
leaq 0xd8(%rsp), %rdi
leaq 0x10(%rsp), %rsi
movq %r15, %rdx
callq 0x1c3fa
leaq 0x60(%rsp), %rdi
leaq 0xd8(%rsp), %rsi
callq 0x1c85c
subq %r13, %r12
jle 0x1c1ad
leaq 0x28(%rsp), %rdi
movq %r14, %rsi
movq %r12, %rdx
callq 0x1c414
leaq 0xd8(%rsp), %rdi
leaq 0x10(%rsp), %rsi
movq %r13, %rdx
callq 0x1c3fa
leaq 0x60(%rsp), %rdi
leaq 0x28(%rsp), %rsi
leaq 0xd8(%rsp), %rdx
callq 0x1d5b0
leaq 0x110(%rsp), %rdi
leaq 0x10(%rsp), %rsi
movq %r12, %rdx
callq 0x1c432
leaq 0x110(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x1c450
leaq 0x28(%rsp), %rdi
movq %r14, %rsi
movq %rbp, %rdx
movq %rbp, %rcx
callq 0x1c3e2
movq 0x58(%rsp), %rax
movq %rax, 0x90(%rsp)
movups 0x28(%rsp), %xmm0
movups 0x38(%rsp), %xmm1
movups 0x48(%rsp), %xmm2
movaps %xmm2, 0x80(%rsp)
movaps %xmm1, 0x70(%rsp)
movaps %xmm0, 0x60(%rsp)
leaq 0xd8(%rsp), %rdi
leaq 0x10(%rsp), %rsi
movq %rbp, %rdx
callq 0x1c3fa
leaq 0x60(%rsp), %rdi
leaq 0xd8(%rsp), %rsi
callq 0x1e312
xorl %r12d, %r12d
testq %rbp, %rbp
movq %rbp, %r15
cmovleq %r12, %r15
leaq 0x60(%rsp), %r13
leaq 0x28(%rsp), %rbx
cmpq %r12, %r15
je 0x1c26d
movq %r13, %rdi
leaq 0x10(%rsp), %rsi
movq %r12, %rdx
callq 0x154fe
movq %r14, %rdi
callq 0x1c46e
movq (%rax), %rax
movslq (%rax,%r12,4), %rdx
movq %rbx, %rdi
movq 0x8(%rsp), %rsi
callq 0x154fe
movq %rbx, %rdi
movq %r13, %rsi
callq 0x1ebab
incq %r12
jmp 0x1c22c
leaq 0x60(%rsp), %rbx
cmpq 0x10(%r14), %rbp
jge 0x1c2a1
movq %r14, %rdi
callq 0x1c46e
movq (%rax), %rax
movslq (%rax,%rbp,4), %rdx
movq %rbx, %rdi
movq 0x8(%rsp), %rsi
callq 0x154fe
movq %rbx, %rdi
callq 0x1c49c
incq %rbp
jmp 0x1c272
movq 0x10(%rsp), %rdi
callq 0x93c0
addq $0x148, %rsp            # imm = 0x148
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x8(%rsp), %rdi
addq $0x148, %rsp            # imm = 0x148
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x1333e
leaq 0x3e157(%rip), %rdi     # 0x5a436
leaq 0x3c3c8(%rip), %rsi     # 0x586ae
leaq 0x3e15c(%rip), %rcx     # 0x5a449
movl $0x2f8, %edx            # imm = 0x2F8
callq 0x9210
jmp 0x1c30b
jmp 0x1c30b
jmp 0x1c30b
jmp 0x1c30b
jmp 0x1c30b
jmp 0x1c30b
jmp 0x1c30b
jmp 0x1c30b
jmp 0x1c30b
jmp 0x1c30b
movq %rax, %rbx
movq 0x10(%rsp), %rdi
callq 0x93c0
movq %rbx, %rdi
callq 0x9640