// File: j-faria[P]kima/examples/trends/../../celerite/cpp/include/celerite/solver/cholesky.h
// Function: celerite::solver::CholeskySolver<double, -1>::dot_L(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&) const
matrix_t dot_L (const Eigen::MatrixXd& z) const {
  if (z.rows() != this->N_) throw dimension_mismatch();
  if (!(this->computed_)) throw compute_exception();

  T tmp;
  int N = z.rows(), nrhs = z.cols();
  Eigen::Array<T, Eigen::Dynamic, 1> D = sqrt(D_.array());
  vector_j_t f(J_);
  matrix_t y(N, nrhs);

  for (int k = 0; k < nrhs; ++k) {
    f.setZero();
    tmp = z(0, k) * D(0);
    y(0, k) = tmp;
    for (int n = 1; n < N; ++n) {
      f = phi_.col(n-1).asDiagonal() * (f + W_.col(n-1) * tmp);
      tmp = D(n) * z(n, k);
      y(n, k) = tmp + u_.col(n-1).transpose().dot(f);
    }
  }

  return y;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x390, %rsp            # imm = 0x390
movq %rdi, -0x310(%rbp)
movq %rdi, %rax
movq %rax, -0x308(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x300(%rbp)
movq -0x18(%rbp), %rdi
callq 0x2f070
movq -0x300(%rbp), %rcx
movslq 0xc(%rcx), %rcx
cmpq %rcx, %rax
je 0x82ef2
movl $0x8, %edi
callq 0x6250
movq %rax, %rdi
movq %rdi, -0x318(%rbp)
xorl %esi, %esi
movl $0x8, %edx
callq 0x6290
movq -0x318(%rbp), %rdi
callq 0x58720
movq -0x318(%rbp), %rdi
leaq 0x968a2(%rip), %rsi     # 0x119788
leaq -0x2a78d(%rip), %rdx    # 0x58760
callq 0x67e0
movq -0x300(%rbp), %rax
testb $0x1, 0x8(%rax)
jne 0x82f45
movl $0x8, %edi
callq 0x6250
movq %rax, %rdi
movq %rdi, -0x320(%rbp)
xorl %esi, %esi
movl $0x8, %edx
callq 0x6290
movq -0x320(%rbp), %rdi
callq 0x58780
movq -0x320(%rbp), %rdi
leaq 0x96867(%rip), %rsi     # 0x1197a0
leaq -0x2a780(%rip), %rdx    # 0x587c0
callq 0x67e0
movq -0x18(%rbp), %rdi
callq 0x2f070
movl %eax, -0x24(%rbp)
movq -0x18(%rbp), %rdi
callq 0x2f0b0
movq -0x300(%rbp), %rdi
movl %eax, -0x28(%rbp)
addq $0x68, %rdi
callq 0x85180
movq %rax, -0x50(%rbp)
leaq -0x48(%rbp), %rdi
movq %rdi, -0x328(%rbp)
leaq -0x50(%rbp), %rsi
callq 0x9f1f0
movq -0x328(%rbp), %rsi
leaq -0x38(%rbp), %rdi
callq 0x9f240
movq -0x300(%rbp), %rsi
addq $0x18, %rsi
leaq -0x68(%rbp), %rdi
callq 0x27330
jmp 0x82fab
movq -0x310(%rbp), %rdi
movb $0x0, -0x75(%rbp)
leaq -0x24(%rbp), %rsi
leaq -0x28(%rbp), %rdx
callq 0x2fc30
jmp 0x82fc5
movl $0x0, -0x7c(%rbp)
movl -0x7c(%rbp), %eax
cmpl -0x28(%rbp), %eax
jge 0x832a5
leaq -0x68(%rbp), %rdi
callq 0x59940
jmp 0x82fe3
movq -0x18(%rbp), %rdi
movslq -0x7c(%rbp), %rdx
xorl %eax, %eax
movl %eax, %esi
callq 0x588f0
movq %rax, -0x330(%rbp)
jmp 0x82ffd
movq -0x330(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x340(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0x38(%rbp), %rdi
callq 0x9f280
movq %rax, -0x338(%rbp)
jmp 0x83026
movq -0x310(%rbp), %rdi
movsd -0x340(%rbp), %xmm0
movq -0x338(%rbp), %rax
movsd (%rax), %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, -0x20(%rbp)
movsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x350(%rbp)
movslq -0x7c(%rbp), %rdx
xorl %eax, %eax
movl %eax, %esi
callq 0x27220
movq %rax, -0x348(%rbp)
jmp 0x8306c
movq -0x348(%rbp), %rax
movsd -0x350(%rbp), %xmm0
movsd %xmm0, (%rax)
movl $0x1, -0x80(%rbp)
movl -0x80(%rbp), %eax
cmpl -0x24(%rbp), %eax
jge 0x83295
movq -0x300(%rbp), %rsi
addq $0x38, %rsi
movl -0x80(%rbp), %eax
decl %eax
movslq %eax, %rdx
leaq -0x190(%rbp), %rdi
callq 0x59970
jmp 0x830b3
leaq -0x158(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x599c0
jmp 0x830c8
movq -0x300(%rbp), %rsi
addq $0x50, %rsi
movl -0x80(%rbp), %eax
decl %eax
movslq %eax, %rdx
leaq -0x288(%rbp), %rdi
callq 0x59970
jmp 0x830e9
leaq -0x250(%rbp), %rdi
leaq -0x288(%rbp), %rsi
leaq -0x20(%rbp), %rdx
callq 0x59ac0
jmp 0x83102
leaq -0x1f8(%rbp), %rdi
leaq -0x68(%rbp), %rsi
leaq -0x250(%rbp), %rdx
callq 0x59a50
jmp 0x8311b
leaq -0x120(%rbp), %rdi
leaq -0x158(%rbp), %rsi
leaq -0x1f8(%rbp), %rdx
callq 0x59a00
jmp 0x83137
leaq -0x68(%rbp), %rdi
leaq -0x120(%rbp), %rsi
callq 0x59b70
jmp 0x83149
movslq -0x80(%rbp), %rsi
leaq -0x38(%rbp), %rdi
callq 0x9f280
movq %rax, -0x358(%rbp)
jmp 0x8315f
movq -0x358(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x368(%rbp)
movq -0x18(%rbp), %rdi
movslq -0x80(%rbp), %rsi
movslq -0x7c(%rbp), %rdx
callq 0x588f0
movq %rax, -0x360(%rbp)
jmp 0x8318c
movq -0x300(%rbp), %rsi
movsd -0x368(%rbp), %xmm0
movq -0x360(%rbp), %rax
movsd (%rax), %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, -0x20(%rbp)
movsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x370(%rbp)
addq $0x20, %rsi
movl -0x80(%rbp), %eax
decl %eax
movslq %eax, %rdx
leaq -0x2f8(%rbp), %rdi
callq 0x59970
jmp 0x831d6
leaq -0x2c0(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0x59ba0
jmp 0x831eb
leaq -0x2c0(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x59be0
movsd %xmm0, -0x378(%rbp)
jmp 0x83205
movq -0x310(%rbp), %rdi
movsd -0x378(%rbp), %xmm1
movsd -0x370(%rbp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x388(%rbp)
movslq -0x80(%rbp), %rsi
movslq -0x7c(%rbp), %rdx
callq 0x27220
movq %rax, -0x380(%rbp)
jmp 0x8323e
movq -0x380(%rbp), %rax
movsd -0x388(%rbp), %xmm0
movsd %xmm0, (%rax)
movl -0x80(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x80(%rbp)
jmp 0x83086
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x832e6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x832dd
movq -0x310(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
callq 0x27fb0
jmp 0x832dd
jmp 0x83297
movl -0x7c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x7c(%rbp)
jmp 0x82fcc
movb $0x1, -0x75(%rbp)
testb $0x1, -0x75(%rbp)
jne 0x832bb
movq -0x310(%rbp), %rdi
callq 0x27fb0
leaq -0x68(%rbp), %rdi
callq 0x278c0
leaq -0x38(%rbp), %rdi
callq 0x9f310
movq -0x308(%rbp), %rax
addq $0x390, %rsp            # imm = 0x390
popq %rbp
retq
leaq -0x68(%rbp), %rdi
callq 0x278c0
leaq -0x38(%rbp), %rdi
callq 0x9f310
movq -0x70(%rbp), %rdi
callq 0x6830
nopl (%rax,%rax)