// File: Luthaf[P]zeopp/./Eigen/src/Householder/Householder.h
// Function: void Eigen::MatrixBase<Eigen::Block<Eigen::Block<Eigen::Matrix<double, 3, 3, 0, 3, 3>, 3, 1, true>, -1, 1, false>>::makeHouseholder<Eigen::VectorBlock<Eigen::Block<Eigen::Block<Eigen::Matrix<double, 3, 3, 0, 3, 3>, 3, 1, true>, -1, 1, false>, -1>>(Eigen::VectorBlock<Eigen::Block<Eigen::Block<Eigen::Matrix<double, 3, 3, 0, 3, 3>, 3, 1, true>, -1, 1, false>, -1>&, double&, double&) const
void MatrixBase<Derived>::makeHouseholder(
  EssentialPart& essential,
  Scalar& tau,
  RealScalar& beta) const
{
  using std::sqrt;
  using numext::conj;
  
  EIGEN_STATIC_ASSERT_VECTOR_ONLY(EssentialPart)
  VectorBlock<const Derived, EssentialPart::SizeAtCompileTime> tail(derived(), 1, size()-1);
  
  RealScalar tailSqNorm = size()==1 ? RealScalar(0) : tail.squaredNorm();
  Scalar c0 = coeff(0);

  if(tailSqNorm == RealScalar(0) && numext::imag(c0)==RealScalar(0))
  {
    tau = RealScalar(0);
    beta = numext::real(c0);
    essential.setZero();
  }
  else
  {
    beta = sqrt(numext::abs2(c0) + tailSqNorm);
    if (numext::real(c0)>=RealScalar(0))
      beta = -beta;
    essential = tail / (c0 - beta);
    tau = conj((beta - c0) / beta);
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x120, %rsp            # imm = 0x120
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x110(%rbp)
callq 0x179c50
movq -0x110(%rbp), %rdi
movq %rax, -0x118(%rbp)
callq 0x17a8d0
movq -0x118(%rbp), %rsi
movq %rax, %rcx
subq $0x1, %rcx
leaq -0x80(%rbp), %rdi
movl $0x1, %edx
callq 0x17af80
movq -0x110(%rbp), %rdi
callq 0x17a8d0
cmpq $0x1, %rax
jne 0x17a9c9
xorps %xmm0, %xmm0
movsd %xmm0, -0x120(%rbp)
jmp 0x17a9da
leaq -0x80(%rbp), %rdi
callq 0x17afc0
movsd %xmm0, -0x120(%rbp)
movq -0x110(%rbp), %rdi
movsd -0x120(%rbp), %xmm0
movsd %xmm0, -0x88(%rbp)
xorl %eax, %eax
movl %eax, %esi
callq 0x17b000
movsd (%rax), %xmm0
movsd %xmm0, -0x90(%rbp)
movsd -0x88(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x17aa5d
jp 0x17aa5d
leaq -0x90(%rbp), %rdi
callq 0x17b030
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x17aa5d
jp 0x17aa5d
movq -0x18(%rbp), %rax
xorps %xmm0, %xmm0
movsd %xmm0, (%rax)
leaq -0x90(%rbp), %rdi
callq 0x178220
movq -0x20(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x10(%rbp), %rdi
callq 0x17b050
jmp 0x17ab2d
leaq -0x90(%rbp), %rdi
callq 0x177030
addsd -0x88(%rbp), %xmm0
callq 0x53f0
movq -0x20(%rbp), %rax
movsd %xmm0, (%rax)
leaq -0x90(%rbp), %rdi
callq 0x178220
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x17aaba
movq -0x20(%rbp), %rax
movsd (%rax), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movq -0x20(%rbp), %rax
movsd %xmm0, (%rax)
movsd -0x90(%rbp), %xmm0
movq -0x20(%rbp), %rax
subsd (%rax), %xmm0
movsd %xmm0, -0x100(%rbp)
leaq -0xf8(%rbp), %rdi
leaq -0x80(%rbp), %rsi
leaq -0x100(%rbp), %rdx
callq 0x17b080
movq -0x10(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0x17b0e0
movq -0x20(%rbp), %rax
movsd (%rax), %xmm0
subsd -0x90(%rbp), %xmm0
movq -0x20(%rbp), %rax
divsd (%rax), %xmm0
movsd %xmm0, -0x108(%rbp)
leaq -0x108(%rbp), %rdi
callq 0x175570
movq -0x18(%rbp), %rax
movsd %xmm0, (%rax)
addq $0x120, %rsp            # imm = 0x120
popq %rbp
retq
nopw %cs:(%rax,%rax)