// File: Pyboon[P]sage/./Eigen/src/Core/ProductEvaluators.h
// Function: void Eigen::internal::outer_product_selector_run<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1, 0, -1, -1>, 0, Eigen::Stride<0, 0>>, -1, -1, false>, -1, -1, false>, Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1, 0, -1, -1>, 0, Eigen::Stride<0, 0>>, -1, -1, false>, -1, 1, true>, -1, 1, false>, Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1, 0, -1, -1>, 0, Eigen::Stride<0, 0>>, -1, -1, false>, 1, -1, false>, 1, -1, false>, Eigen::internal::generic_product_impl<Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1, 0, -1, -1>, 0, Eigen::Stride<0, 0>>, -1, -1, false>, -1, 1, true>, -1, 1, false>, Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1, 0, -1, -1>, 0, Eigen::Stride<0, 0>>, -1, -1, false>, 1, -1, false>, 1, -1, false>, Eigen::DenseShape, Eigen::DenseShape, 5>::sub>(Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1, 0, -1, -1>, 0, Eigen::Stride<0, 0>>, -1, -1, false>, -1, -1, false>&, Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1, 0, -1, -1>, 0, Eigen::Stride<0, 0>>, -1, -1, false>, -1, 1, true>, -1, 1, false> const&, Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1, 0, -1, -1>, 0, Eigen::Stride<0, 0>>, -1, -1, false>, 1, -1, false>, 1, -1, false> const&, Eigen::internal::generic_product_impl<Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1, 0, -1, -1>, 0, Eigen::Stride<0, 0>>, -1, -1, false>, -1, 1, true>, -1, 1, false>, Eigen::Block<Eigen::Block<Eigen::Block<Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1, 0, -1, -1>, 0, Eigen::Stride<0, 0>>, -1, -1, false>, 1, -1, false>, 1, -1, false>, Eigen::DenseShape, Eigen::DenseShape, 5>::sub const&, Eigen::internal::false_type const&)
void outer_product_selector_run(Dst& dst, const Lhs &lhs, const Rhs &rhs, const Func& func, const false_type&)
{
  evaluator<Rhs> rhsEval(rhs);
  typename nested_eval<Lhs,Rhs::SizeAtCompileTime>::type actual_lhs(lhs);
  // FIXME if cols is large enough, then it might be useful to make sure that lhs is sequentially stored
  // FIXME not very good if rhs is real and lhs complex while alpha is real too
  const Index cols = dst.cols();
  for (Index j=0; j<cols; ++j)
    func(dst.col(j), rhsEval.coeff(Index(0),j) * actual_lhs);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2b0, %rsp            # imm = 0x2B0
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq -0x18(%rbp), %rsi
leaq -0x40(%rbp), %rdi
callq 0x4ef90
movq -0x10(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0x4c170
jmp 0x4ee8e
movq -0x8(%rbp), %rdi
callq 0x4ed70
movq %rax, -0x108(%rbp)
movq $0x0, -0x110(%rbp)
movq -0x110(%rbp), %rax
cmpq -0x108(%rbp), %rax
jge 0x4ef6c
movq -0x20(%rbp), %rax
movq %rax, -0x2a8(%rbp)
movq -0x8(%rbp), %rsi
movq -0x110(%rbp), %rdx
leaq -0x1c0(%rbp), %rdi
callq 0x4f000
jmp 0x4eee1
movq -0x110(%rbp), %rdx
xorl %eax, %eax
movl %eax, %esi
leaq -0x40(%rbp), %rdi
callq 0x4f100
movq %rax, -0x2b0(%rbp)
jmp 0x4eefe
movq -0x2b0(%rbp), %rsi
leaq -0x2a0(%rbp), %rdi
leaq -0xf0(%rbp), %rdx
callq 0x4f050
jmp 0x4ef1a
movq -0x2a8(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
leaq -0x2a0(%rbp), %rdx
callq 0x4efc0
jmp 0x4ef36
jmp 0x4ef38
movq -0x110(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x110(%rbp)
jmp 0x4eea9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x4f180
jmp 0x4ef7e
leaq -0x40(%rbp), %rdi
callq 0x4f180
addq $0x2b0, %rsp            # imm = 0x2B0
popq %rbp
retq
movq -0xf8(%rbp), %rdi
callq 0x9dc0
nopw (%rax,%rax)