user: Demonstrate the C code that generates the assembly output below:

```asm
<vm_loglikelihood_lambda_partial_naive>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x78,%rsp
  mov    %edi,0x4c(%rsp)
  mov    %edx,0x18(%rsp)
  mov    %ecx,0x48(%rsp)
  mov    %r8,0x60(%rsp)
  mov    %r9,0x8(%rsp)
  mov    0xb0(%rsp),%r14
  test   %esi,%esi
  jle    L16
  mov    %esi,%ebx
  mov    %esi,%eax
  mov    %rax,0x40(%rsp)
  movslq %esi,%rax
  shl    $0x3,%rax
  mov    %rax,0x50(%rsp)
  mov    $0x0,%r15d
  pxor   %xmm4,%xmm4
  movsd  %xmm4,0x20(%rsp)
L21:
  mov    %r15d,%ebp
  cmp    %r15d,0x18(%rsp)
  je     L43
L41:
  add    $0x1,%r15
  cmp    0x40(%rsp),%r15
  jne    L21
L20:
  movsd  0x20(%rsp),%xmm0
  xorpd  D2(%rip),%xmm0
  add    $0x78,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L43:
  cmpl   $0x0,0x4c(%rsp)
  jle    L41
  mov    0xb8(%rsp),%rax
  lea    (%rax,%r15,8),%r12
  mov    %r15,%rax
  neg    %rax
  shl    $0x3,%rax
  mov    %rax,0x58(%rsp)
  movl   $0x0,0x1c(%rsp)
  mov    %r15,0x68(%rsp)
  mov    0x60(%rsp),%r13
L25:
  mov    0x58(%rsp),%rax
  lea    (%r12,%rax,1),%r15
  mov    %r15,%r9
  mov    %r14,%r8
  mov    0x8(%rsp),%rcx
  mov    %r13,%rdx
  mov    %ebp,%esi
  mov    %ebx,%edi
  call   <marginal_j_concentration@plt>
  movsd  %xmm0,0x10(%rsp)
  mov    %r15,%r9
  mov    %r14,%r8
  mov    0x8(%rsp),%rcx
  mov    %r13,%rdx
  mov    %ebp,%esi
  mov    %ebx,%edi
  call   <marginal_j_mean@plt>
  movapd %xmm0,%xmm2
  movsd  (%r12),%xmm0
  movsd  %xmm2,0x38(%rsp)
  subsd  %xmm2,%xmm0
  call   <cos@plt>
  movsd  %xmm0,0x28(%rsp)
  movsd  0x10(%rsp),%xmm0
  call   <bessi1_spd@plt>
  movsd  %xmm0,0x30(%rsp)
  movsd  0x10(%rsp),%xmm0
  call   <bessi0_spd@plt>
  movapd %xmm0,%xmm1
  movsd  0x30(%rsp),%xmm0
  divsd  %xmm1,%xmm0
  movsd  0x28(%rsp),%xmm3
  subsd  %xmm0,%xmm3
  movsd  %xmm3,0x28(%rsp)
  push   %r15
  push   %r14
  mov    0x18(%rsp),%r9
  mov    %r13,%r8
  mov    0x58(%rsp),%ecx
  mov    0x28(%rsp),%edx
  mov    %ebp,%esi
  mov    %ebx,%edi
  call   <vm_marginalKapa_lambda_partial_naive@plt>
  mulsd  0x38(%rsp),%xmm0
  addsd  0x30(%rsp),%xmm0
  movsd  %xmm0,0x30(%rsp)
  movsd  (%r12),%xmm0
  subsd  0x48(%rsp),%xmm0
  call   <sin@plt>
  movapd %xmm0,%xmm5
  mulsd  0x20(%rsp),%xmm5
  movsd  %xmm5,0x20(%rsp)
  push   %r15
  push   %r14
  mov    0x28(%rsp),%r9
  mov    %r13,%r8
  mov    0x68(%rsp),%ecx
  mov    0x38(%rsp),%edx
  mov    %ebp,%esi
  mov    %ebx,%edi
  call   <vm_marginalMu_lambda_partial_naive@plt>
  mulsd  0x30(%rsp),%xmm0
  movapd %xmm0,%xmm6
  addsd  0x40(%rsp),%xmm6
  movsd  %xmm6,0x40(%rsp)
  addl   $0x1,0x3c(%rsp)
  mov    0x3c(%rsp),%eax
  add    0x70(%rsp),%r12
  add    $0x20,%rsp
  cmp    %eax,0x4c(%rsp)
  jne    L25
  mov    0x68(%rsp),%r15
  jmp    L41
L16:
  pxor   %xmm7,%xmm7
  movsd  %xmm7,0x20(%rsp)
  jmp    L20
```

tool_calls: name: extract_symbolic_data
arguments: label: D2
type_guessed: f32[4]

tool: {"D2": [0.0,-0.0,0.0,0.0]}

assistant: ```c
double vm_loglikelihood_lambda_partial_naive(int n, int p, int R, int S, double *mu, double *kappa, double *lambda, double *theta) {
  int j, i;
  double acum = 0.;
  double m_rest, k_rest;
  for (j = 0; j < p; j++) {
    if (R == j) {
      for (i = 0; i < n; i++) {
        k_rest = marginal_j_concentration(p, j, mu, kappa, lambda, theta + i * p);
        m_rest = marginal_j_mean(p, j, mu, kappa, lambda, theta + i * p);
        acum += (cos(theta[i * p + j] - m_rest) - (bessi1_spd(k_rest) / bessi0_spd(k_rest))) * vm_marginalKapa_lambda_partial_naive(p, j, R, S, mu, kappa, lambda, theta + i * p);
        acum += k_rest * sin(theta[i * p + j] - m_rest) * vm_marginalMu_lambda_partial_naive(p, j, R, S, mu, kappa, lambda, theta + i * p);
      }
    }
  }
  return -acum;
}
```