user: What is the c source code of the assembly code below?

```asm
<mv_vonmises_lossFunction>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  mov    %edi,-0x54(%rbp)
  mov    %esi,-0x58(%rbp)
  mov    %rdx,-0x60(%rbp)
  mov    %rcx,-0x68(%rbp)
  mov    %r8,-0x70(%rbp)
  mov    %r9,-0x78(%rbp)
  mov    -0x58(%rbp),%ecx
  mov    -0x58(%rbp),%edx
  mov    -0x58(%rbp),%esi
  mov    -0x54(%rbp),%eax
  sub    $0x8,%rsp
  push   0x10(%rbp)
  push   -0x68(%rbp)
  push   -0x70(%rbp)
  mov    $0x6e,%r9d
  mov    $0x6e,%r8d
  mov    %eax,%edi
  call   <generalMatrixMatrix@plt>
  add    $0x20,%rsp
  fldz
  fstpt  -0x40(%rbp)
  cmpq   $0x0,0x20(%rbp)
  je     L223
  cmpq   $0x0,0x18(%rbp)
  je     L223
  mov    -0x58(%rbp),%eax
  cltq
  mov    %eax,%edx
  mov    -0x58(%rbp),%eax
  cltq
  imul   %edx,%eax
  shl    $0x3,%eax
  mov    %eax,%edx
  mov    0x20(%rbp),%rax
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  mov    -0x58(%rbp),%eax
  cltq
  shl    $0x3,%eax
  mov    %eax,%edx
  mov    0x18(%rbp),%rax
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  movl   $0x0,-0x48(%rbp)
  jmp    L98
L193:
  movl   $0x0,-0x4c(%rbp)
  jmp    L225
L23:
  mov    -0x48(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x48(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,-0x80(%rbp)
  fldl   -0x80(%rbp)
  mov    -0x4c(%rbp),%eax
  imul   -0x58(%rbp),%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  mov    -0x4c(%rbp),%eax
  imul   -0x58(%rbp),%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  fmulp  %st,%st(1)
  faddp  %st,%st(1)
  fstpl  -0x80(%rbp)
  movsd  -0x80(%rbp),%xmm0
  call   <sqrtl@plt>
  fstpt  -0x30(%rbp)
  fldt   -0x30(%rbp)
  fldt   0xca9(%rip)        # 2000 <_fini+0x734>
  fcomip %st(1),%st
  fstp   %st(0)
  jbe    L58
  push   -0x28(%rbp)
  push   -0x30(%rbp)
  call   <bessi0_spd_exponScaled@plt>
  add    $0x10,%rsp
  jmp    L97
L58:
  push   -0x28(%rbp)
  push   -0x30(%rbp)
  call   <bessi0_salahat_exponScaled@plt>
  add    $0x10,%rsp
L97:
  fstpt  -0x20(%rbp)
  fldt   -0x30(%rbp)
  fldt   0xc77(%rip)        # 2000 <_fini+0x734>
  fcomip %st(1),%st
  fstp   %st(0)
  jbe    L7
  push   -0x28(%rbp)
  push   -0x30(%rbp)
  call   <bessi1_spd_exponScaled@plt>
  add    $0x10,%rsp
  jmp    L47
L7:
  push   -0x28(%rbp)
  push   -0x30(%rbp)
  call   <bessi1_salahat_exponScaled@plt>
  add    $0x10,%rsp
L47:
  fldt   -0x20(%rbp)
  fldt   -0x30(%rbp)
  fmulp  %st,%st(1)
  fdivrp %st,%st(1)
  fstpt  -0x10(%rbp)
  push   -0x18(%rbp)
  push   -0x20(%rbp)
  call   <logl@plt>
  add    $0x10,%rsp
  fldt   -0x30(%rbp)
  faddp  %st,%st(1)
  mov    -0x4c(%rbp),%eax
  imul   -0x58(%rbp),%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  mov    -0x48(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm2
  movsd  %xmm2,-0x80(%rbp)
  fldl   -0x80(%rbp)
  fmulp  %st,%st(1)
  fsubrp %st,%st(1)
  mov    -0x4c(%rbp),%eax
  imul   -0x58(%rbp),%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  mov    -0x4c(%rbp),%eax
  imul   -0x58(%rbp),%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  fmulp  %st,%st(1)
  fsubrp %st,%st(1)
  fldt   -0x40(%rbp)
  faddp  %st,%st(1)
  fstpt  -0x40(%rbp)
  mov    -0x48(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    0x18(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm3
  movsd  %xmm3,-0x80(%rbp)
  fldl   -0x80(%rbp)
  mov    -0x48(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm4
  movsd  %xmm4,-0x80(%rbp)
  fldl   -0x80(%rbp)
  fldt   -0x10(%rbp)
  fmulp  %st,%st(1)
  mov    -0x4c(%rbp),%eax
  imul   -0x58(%rbp),%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  fsubrp %st,%st(1)
  faddp  %st,%st(1)
  mov    -0x48(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    0x18(%rbp),%rax
  add    %rdx,%rax
  fstpl  -0x80(%rbp)
  movsd  -0x80(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movl   $0x0,-0x44(%rbp)
  jmp    L108
L75:
  mov    -0x44(%rbp),%eax
  imul   -0x58(%rbp),%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm5
  movsd  %xmm5,-0x80(%rbp)
  fldl   -0x80(%rbp)
  mov    -0x4c(%rbp),%eax
  imul   -0x58(%rbp),%eax
  mov    %eax,%edx
  mov    -0x44(%rbp),%eax
  add    %edx,%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  mov    -0x4c(%rbp),%eax
  imul   -0x58(%rbp),%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  fldt   -0x10(%rbp)
  fmulp  %st,%st(1)
  mov    -0x4c(%rbp),%eax
  imul   -0x58(%rbp),%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  fsubrp %st,%st(1)
  fmulp  %st,%st(1)
  faddp  %st,%st(1)
  mov    -0x44(%rbp),%eax
  imul   -0x58(%rbp),%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    0x20(%rbp),%rax
  add    %rdx,%rax
  fstpl  -0x80(%rbp)
  movsd  -0x80(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x44(%rbp)
L108:
  mov    -0x44(%rbp),%eax
  cmp    -0x48(%rbp),%eax
  jl     L75
  mov    -0x48(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x44(%rbp)
  jmp    L42
L147:
  mov    -0x48(%rbp),%eax
  imul   -0x58(%rbp),%eax
  mov    %eax,%edx
  mov    -0x44(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm6
  movsd  %xmm6,-0x80(%rbp)
  fldl   -0x80(%rbp)
  mov    -0x4c(%rbp),%eax
  imul   -0x58(%rbp),%eax
  mov    %eax,%edx
  mov    -0x44(%rbp),%eax
  add    %edx,%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  mov    -0x4c(%rbp),%eax
  imul   -0x58(%rbp),%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  fldt   -0x10(%rbp)
  fmulp  %st,%st(1)
  mov    -0x4c(%rbp),%eax
  imul   -0x58(%rbp),%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  fsubrp %st,%st(1)
  fmulp  %st,%st(1)
  faddp  %st,%st(1)
  mov    -0x48(%rbp),%eax
  imul   -0x58(%rbp),%eax
  mov    %eax,%edx
  mov    -0x44(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    0x20(%rbp),%rax
  add    %rdx,%rax
  fstpl  -0x80(%rbp)
  movsd  -0x80(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x44(%rbp)
L42:
  mov    -0x44(%rbp),%eax
  cmp    -0x58(%rbp),%eax
  jl     L147
  addl   $0x1,-0x4c(%rbp)
L225:
  mov    -0x4c(%rbp),%eax
  cmp    -0x54(%rbp),%eax
  jl     L23
  mov    -0x48(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x44(%rbp)
  jmp    L226
L205:
  mov    -0x48(%rbp),%eax
  imul   -0x58(%rbp),%eax
  mov    %eax,%edx
  mov    -0x44(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    0x20(%rbp),%rax
  add    %rax,%rdx
  mov    -0x44(%rbp),%eax
  imul   -0x58(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x48(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    0x20(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x44(%rbp)
L226:
  mov    -0x44(%rbp),%eax
  cmp    -0x58(%rbp),%eax
  jl     L205
  addl   $0x1,-0x48(%rbp)
L98:
  mov    -0x48(%rbp),%eax
  cmp    -0x58(%rbp),%eax
  jl     L193
  jmp    L37
L223:
  movl   $0x0,-0x48(%rbp)
  jmp    L74
L102:
  movl   $0x0,-0x4c(%rbp)
  jmp    L18
L140:
  mov    -0x48(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x48(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,-0x80(%rbp)
  fldl   -0x80(%rbp)
  mov    -0x4c(%rbp),%eax
  imul   -0x58(%rbp),%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  mov    -0x4c(%rbp),%eax
  imul   -0x58(%rbp),%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  fmulp  %st,%st(1)
  faddp  %st,%st(1)
  fstpl  -0x80(%rbp)
  movsd  -0x80(%rbp),%xmm0
  call   <sqrtl@plt>
  fstpt  -0x30(%rbp)
  fldt   -0x30(%rbp)
  fldt   0x828(%rip)        # 2000 <_fini+0x734>
  fcomip %st(1),%st
  fstp   %st(0)
  jbe    L204
  push   -0x28(%rbp)
  push   -0x30(%rbp)
  call   <bessi0_spd_exponScaled@plt>
  add    $0x10,%rsp
  jmp    L82
L204:
  push   -0x28(%rbp)
  push   -0x30(%rbp)
  call   <bessi0_salahat_exponScaled@plt>
  add    $0x10,%rsp
L82:
  fstpt  -0x20(%rbp)
  push   -0x18(%rbp)
  push   -0x20(%rbp)
  call   <logl@plt>
  add    $0x10,%rsp
  fldt   -0x30(%rbp)
  faddp  %st,%st(1)
  mov    -0x4c(%rbp),%eax
  imul   -0x58(%rbp),%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  mov    -0x48(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm7
  movsd  %xmm7,-0x80(%rbp)
  fldl   -0x80(%rbp)
  fmulp  %st,%st(1)
  fsubrp %st,%st(1)
  mov    -0x4c(%rbp),%eax
  imul   -0x58(%rbp),%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  mov    -0x4c(%rbp),%eax
  imul   -0x58(%rbp),%eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  fldt   (%rax)
  fmulp  %st,%st(1)
  fsubrp %st,%st(1)
  fldt   -0x40(%rbp)
  faddp  %st,%st(1)
  fstpt  -0x40(%rbp)
  addl   $0x1,-0x4c(%rbp)
L18:
  mov    -0x4c(%rbp),%eax
  cmp    -0x54(%rbp),%eax
  jl     L140
  addl   $0x1,-0x48(%rbp)
L74:
  mov    -0x48(%rbp),%eax
  cmp    -0x58(%rbp),%eax
  jl     L102
L37:
  fldt   -0x40(%rbp)
  leave
  ret
```

assistant: ```c
long double mv_vonmises_lossFunction(int n, int p, double *kappa, double *lambda, long double *S, long double *C, long double *ro, double *d_kappa, double *d_lambda) {
  int i, j, s;
  long double fx;
  long double k_i_j;
  long double bes_kij;
  long double bes1_kij;
  long double a_kij;
  generalMatrixMatrix(n, p, p, p, 'n', 'n', S, lambda, ro);
  fx = 0;
  if (d_lambda != NULL && d_kappa != NULL) {
    memset(d_lambda, 0, sizeof(double) * p * p);
    memset(d_kappa, 0, sizeof(double) * p);
    for (j = 0; j < p; j++) {
      for (i = 0; i < n; i++) {
        k_i_j = sqrtl((kappa[j] * kappa[j]) + (ro[i * p + j] * ro[i * p + j]));
        bes_kij = (k_i_j) < (1E31) ? (bessi0_spd_exponScaled(k_i_j)) : (bessi0_salahat_exponScaled(k_i_j));
        a_kij = (((k_i_j) < (1E31) ? (bessi1_spd_exponScaled(k_i_j)) : (bessi1_salahat_exponScaled(k_i_j))) / (bes_kij * k_i_j));
        fx += (k_i_j + logl(bes_kij)) - (C[i * p + j] * kappa[j]) - (S[i * p + j] * ro[i * p + j]);
        d_kappa[j] += a_kij * kappa[j] - C[i * p + j];
        for (s = 0; s < j; s++)
          d_lambda[s * p + j] += S[i * p + s] * (a_kij * ro[i * p + j] - S[i * p + j]);
        for (s = j + 1; s < p; s++)
          d_lambda[j * p + s] += S[i * p + s] * (a_kij * ro[i * p + j] - S[i * p + j]);
      }
      for (s = j + 1; s < p; s++) {
        d_lambda[s * p + j] = d_lambda[j * p + s];
      }
    }
  } else {
    for (j = 0; j < p; j++) {
      for (i = 0; i < n; i++) {
        k_i_j = sqrtl((kappa[j] * kappa[j]) + (ro[i * p + j] * ro[i * p + j]));
        bes_kij = (k_i_j) < (1E31) ? (bessi0_spd_exponScaled(k_i_j)) : (bessi0_salahat_exponScaled(k_i_j));
        fx += (k_i_j + logl(bes_kij)) - (C[i * p + j] * kappa[j]) - (S[i * p + j] * ro[i * p + j]);
      }
    }
  }
  return (fx);
}
```