user: 请将以下的汇编代码转换成C语言代码：

```asm
<kEpsilon_3D_Evaluate_sd>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    0x98(%rsp),%r15
  mov    0xa0(%rsp),%r14
  mov    0xa8(%rsp),%r13
  mov    0xb0(%rsp),%r12
  mov    0xb8(%rsp),%r10
  mov    %esi,-0x3c(%rsp)
  mov    0xc0(%rsp),%r11
  mov    %rcx,-0x28(%rsp)
  mov    0xc8(%rsp),%rbx
  mov    %r8,-0x68(%rsp)
  mov    0xd0(%rsp),%rbp
  mov    %r9,-0x60(%rsp)
  movsd  %xmm3,-0x38(%rsp)
  movsd  %xmm4,-0x30(%rsp)
  movsd  %xmm6,-0x58(%rsp)
  test   %edi,%edi
  jle    L86
  movapd %xmm4,%xmm7
  movslq %esi,%rax
  mov    %edi,%r9d
  mov    %rdx,-0x70(%rsp)
  addsd  %xmm4,%xmm7
  shl    $0x3,%rax
  mov    0x40(%rsp),%rdi
  movq   D16(%rip),%xmm11
  mov    %rax,-0x18(%rsp)
  lea    -0x1(%rsi),%eax
  mov    0x38(%rsp),%r8
  xor    %esi,%esi
  xorpd  %xmm11,%xmm2
  movapd %xmm0,%xmm12
  pxor   %xmm8,%xmm8
  movsd  D21(%rip),%xmm10
  movsd  %xmm7,-0x10(%rsp)
  movapd %xmm3,%xmm7
  movapd %xmm2,%xmm14
  lea    0x8(,%rax,8),%rcx
  addsd  %xmm3,%xmm7
  movslq %r9d,%rax
  xor    %r9d,%r9d
  mov    %rax,-0x20(%rsp)
  movsd  %xmm7,-0x8(%rsp)
  movsd  D8(%rip),%xmm7
  nopl   0x0(%rax,%rax,1)
L19:
  movsd  (%r8),%xmm4
  movsd  -0x30(%rsp),%xmm0
  movsd  (%rdi),%xmm5
  mulsd  %xmm4,%xmm0
  movapd %xmm5,%xmm6
  addsd  %xmm10,%xmm6
  mulsd  %xmm4,%xmm0
  movapd %xmm0,%xmm2
  divsd  %xmm6,%xmm2
  comisd %xmm2,%xmm8
  ja     L34
  mulsd  %xmm5,%xmm5
  movsd  -0x10(%rsp),%xmm3
  xorpd  %xmm11,%xmm0
  movapd %xmm2,%xmm15
  xorpd  %xmm11,%xmm15
  mulsd  %xmm4,%xmm3
  addsd  %xmm10,%xmm5
  divsd  %xmm6,%xmm3
  divsd  %xmm5,%xmm0
  movapd %xmm3,%xmm9
  xorpd  %xmm11,%xmm9
  movapd %xmm0,%xmm13
  xorpd  %xmm11,%xmm13
L84:
  mov    0x48(%rsp),%rax
  movsd  %xmm4,(%rax,%rsi,8)
  mov    0x50(%rsp),%rax
  movsd  %xmm7,(%rax,%rsi,8)
  mov    0x58(%rsp),%rax
  movsd  (%rdi),%xmm4
  movsd  %xmm4,(%rax,%rsi,8)
  mov    0x60(%rsp),%rax
  movsd  %xmm7,(%rax,%rsi,8)
  mov    -0x3c(%rsp),%eax
  test   %eax,%eax
  jle    L6
  mov    %r9,-0x50(%rsp)
  mov    %r9,%rax
  mov    -0x70(%rsp),%rdx
  mov    %rsi,-0x48(%rsp)
  mov    0x90(%rsp),%r9
  mov    0x88(%rsp),%rsi
  nopl   0x0(%rax,%rax,1)
L5:
  movsd  (%r8),%xmm4
  mulsd  (%rdx,%rax,1),%xmm4
  movsd  %xmm4,(%rsi,%rax,1)
  movsd  (%rdx,%rax,1),%xmm4
  movsd  %xmm4,(%r9,%rax,1)
  mulsd  (%rdi),%xmm4
  movsd  %xmm4,(%r15,%rax,1)
  movsd  (%rdx,%rax,1),%xmm4
  movsd  %xmm4,(%r14,%rax,1)
  add    $0x8,%rax
  cmp    %rax,%rcx
  jne    L5
  movsd  (%r8),%xmm4
  mov    -0x48(%rsp),%rsi
  movapd %xmm3,%xmm6
  movapd %xmm0,%xmm5
  mov    0x68(%rsp),%rax
  divsd  %xmm12,%xmm6
  mov    -0x50(%rsp),%r9
  mov    %rdx,-0x70(%rsp)
  movsd  %xmm4,(%rax,%rsi,8)
  mov    0x70(%rsp),%rax
  movsd  %xmm7,(%rax,%rsi,8)
  mov    0x78(%rsp),%rax
  movsd  (%rdi),%xmm4
  movsd  %xmm4,(%rax,%rsi,8)
  movapd %xmm2,%xmm4
  mov    0x80(%rsp),%rax
  movsd  %xmm7,(%rax,%rsi,8)
  mov    %r9,%rax
  divsd  %xmm12,%xmm5
  divsd  %xmm1,%xmm3
  divsd  %xmm1,%xmm0
  divsd  %xmm12,%xmm4
  divsd  %xmm1,%xmm2
  addsd  -0x58(%rsp),%xmm4
  addsd  -0x58(%rsp),%xmm2
  nopl   0x0(%rax)
L70:
  movsd  %xmm4,0x0(%r13,%rax,1)
  movsd  %xmm6,(%r12,%rax,1)
  movsd  %xmm5,(%r10,%rax,1)
  movsd  %xmm2,(%r11,%rax,1)
  movsd  %xmm3,(%rbx,%rax,1)
  movsd  %xmm0,0x0(%rbp,%rax,1)
  add    $0x8,%rax
  cmp    %rax,%rcx
  jne    L70
  mov    %rdx,-0x70(%rsp)
L43:
  mov    -0x28(%rsp),%rax
  mov    -0x68(%rsp),%rdx
  movsd  (%rax,%r9,1),%xmm6
  movsd  0x8(%rdx,%r9,1),%xmm2
  mov    -0x60(%rsp),%rdx
  movsd  0x8(%rax,%r9,1),%xmm3
  mulsd  %xmm6,%xmm6
  movsd  0x10(%rax,%r9,1),%xmm0
  mov    -0x60(%rsp),%rax
  mulsd  %xmm2,%xmm2
  movsd  0x10(%rdx,%r9,1),%xmm5
  mov    -0x68(%rsp),%rdx
  addsd  (%rax,%r9,1),%xmm0
  mulsd  %xmm5,%xmm5
  addsd  (%rdx,%r9,1),%xmm3
  movsd  0x10(%rdx,%r9,1),%xmm4
  addsd  0x8(%rax,%r9,1),%xmm4
  mov    0xd8(%rsp),%rax
  mulsd  %xmm0,%xmm0
  addsd  %xmm6,%xmm2
  mulsd  %xmm3,%xmm3
  mulsd  %xmm4,%xmm4
  addsd  %xmm5,%xmm2
  addsd  %xmm2,%xmm2
  addsd  %xmm2,%xmm3
  movapd %xmm15,%xmm2
  addsd  %xmm3,%xmm0
  movsd  -0x38(%rsp),%xmm3
  addsd  %xmm4,%xmm0
  mulsd  %xmm0,%xmm2
  addsd  (%rdi),%xmm2
  mulsd  %xmm0,%xmm9
  movsd  %xmm2,(%rax,%rsi,8)
  movapd %xmm13,%xmm2
  mov    0xe0(%rsp),%rax
  mulsd  %xmm0,%xmm2
  movsd  %xmm9,(%rax,%rsi,8)
  mov    0xe8(%rsp),%rax
  addsd  %xmm7,%xmm2
  movsd  %xmm2,(%rax,%rsi,8)
  movsd  (%rdi),%xmm4
  movsd  (%r8),%xmm2
  mulsd  %xmm4,%xmm3
  movapd %xmm2,%xmm6
  addsd  %xmm10,%xmm6
  mulsd  %xmm4,%xmm3
  movapd %xmm3,%xmm5
  divsd  %xmm6,%xmm5
  comisd %xmm5,%xmm8
  ja     L40
  mulsd  -0x8(%rsp),%xmm4
  movapd %xmm2,%xmm9
  xorpd  %xmm11,%xmm3
  mulsd  %xmm2,%xmm9
  divsd  %xmm6,%xmm4
  addsd  %xmm10,%xmm9
  divsd  %xmm9,%xmm3
L39:
  mulsd  %xmm14,%xmm2
  mov    0xf0(%rsp),%rax
  add    $0x8,%rdi
  add    $0x8,%r8
  mulsd  %xmm0,%xmm2
  mulsd  %xmm14,%xmm0
  addsd  %xmm5,%xmm2
  addsd  %xmm3,%xmm0
  movsd  %xmm2,(%rax,%rsi,8)
  mov    0xf8(%rsp),%rax
  movsd  %xmm0,(%rax,%rsi,8)
  mov    0x100(%rsp),%rax
  movsd  %xmm4,(%rax,%rsi,8)
  mov    -0x18(%rsp),%rax
  add    $0x1,%rsi
  add    %rax,%r9
  add    %rax,%rcx
  cmp    %rsi,-0x20(%rsp)
  jne    L19
L86:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  cs nopw 0x0(%rax,%rax,1)
L40:
  movapd %xmm8,%xmm4
  movapd %xmm8,%xmm3
  movapd %xmm8,%xmm5
  jmp    L39
  nopl   0x0(%rax)
L34:
  movapd %xmm8,%xmm0
  movapd %xmm8,%xmm3
  movapd %xmm8,%xmm2
  mov    D16(%rip),%rax
  movq   %rax,%xmm13
  movq   %rax,%xmm9
  movq   %rax,%xmm15
  jmp    L84
  nopw   0x0(%rax,%rax,1)
L6:
  movsd  (%r8),%xmm0
  mov    0x68(%rsp),%rax
  movsd  %xmm0,(%rax,%rsi,8)
  mov    0x70(%rsp),%rax
  movsd  %xmm7,(%rax,%rsi,8)
  mov    0x78(%rsp),%rax
  movsd  (%rdi),%xmm0
  movsd  %xmm0,(%rax,%rsi,8)
  mov    0x80(%rsp),%rax
  movsd  %xmm7,(%rax,%rsi,8)
  jmp    L43
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D16
type_guessed: f32[2]
name: extract_symbolic_data
arguments: data_label: D21
type_guessed: byte[8]
name: extract_symbolic_data
arguments: data_label: D8
type_guessed: f64

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

tool: {"D21": [0x8d,0xed,0xb5,0xa0,0xf7,0xc6,0xb0,0x3e]}

tool: D8: 1

assistant: ```c
void kEpsilon_3D_Evaluate_sd(int nPoints, int nSpace, double sigma_k, double sigma_e, double c_1, double c_2, double c_mu, double c_e, double nu, double *velocity, double *gradu, double *gradv, double *gradw, double *k, double *epsilon, double *m_k, double *dm_k, double *m_e, double *dm_e, double *phi_k, double *dphi_k, double *phi_e, double *dphi_e, double *f_k, double *df_k, double *f_e, double *df_e, double *a_k, double *da_k_dk, double *da_k_de, double *a_e, double *da_e_dk, double *da_e_de, double *r_k, double *dr_k_dk, double *dr_k_de, double *r_e, double *dr_e_dk, double *dr_e_de) {
  int i, I;
  double nu_t, dnu_t_dk, dnu_t_de, PiD4, eval, kval, disp, ddisp_dk, ddisp_de;
  const double div_eps = 1.0e-6;
  for (i = 0; i < nPoints; i++) {
    eval = epsilon[i] >= 0.0 ? epsilon[i] : 0.0;
    kval = k[i] >= 0.0 ? k[i] : 0.0;
    nu_t = c_mu * k[i] * k[i] / (epsilon[i] + div_eps);
    dnu_t_dk = 2.0 * c_mu * k[i] / (epsilon[i] + div_eps);
    dnu_t_de = -c_mu * k[i] * k[i] / (epsilon[i] * epsilon[i] + div_eps);
    if (nu_t < 0.0) {
      nu_t = 0.0;
      dnu_t_dk = 0.0;
      dnu_t_de = 0.0;
    }
    m_k[i] = k[i];
    dm_k[i] = 1.0;
    m_e[i] = epsilon[i];
    dm_e[i] = 1.0;
    for (I = 0; I < nSpace; I++) {
      f_k[i * nSpace + I] = k[i] * velocity[i * nSpace + I];
      df_k[i * nSpace + I] = velocity[i * nSpace + I];
      f_e[i * nSpace + I] = epsilon[i] * velocity[i * nSpace + I];
      df_e[i * nSpace + I] = velocity[i * nSpace + I];
    }
    phi_k[i] = k[i];
    dphi_k[i] = 1.0;
    phi_e[i] = epsilon[i];
    dphi_e[i] = 1.0;
    for (I = 0; I < nSpace; I++) {
      a_k[i * nSpace + I] = nu_t / sigma_k + nu;
      da_k_dk[i * nSpace + I] = dnu_t_dk / sigma_k;
      da_k_de[i * nSpace + I] = dnu_t_de / sigma_k;
      a_e[i * nSpace + I] = nu_t / sigma_e + nu;
      da_e_dk[i * nSpace + I] = dnu_t_dk / sigma_e;
      da_e_de[i * nSpace + I] = dnu_t_de / sigma_e;
    }
    PiD4 = 2.0 * (gradu[i * nSpace + 0] * gradu[i * nSpace + 0] + gradv[i * nSpace + 1] * gradv[i * nSpace + 1] + gradw[i * nSpace + 2] * gradw[i * nSpace + 2]) + (gradu[i * nSpace + 1] + gradv[i * nSpace + 0]) * (gradu[i * nSpace + 1] + gradv[i * nSpace + 0]) + (gradu[i * nSpace + 2] + gradw[i * nSpace + 0]) * (gradu[i * nSpace + 2] + gradw[i * nSpace + 0]) + (gradv[i * nSpace + 2] + gradw[i * nSpace + 1]) * (gradv[i * nSpace + 2] + gradw[i * nSpace + 1]);
    r_k[i] = -nu_t * PiD4 + epsilon[i];
    dr_k_dk[i] = -dnu_t_dk * PiD4;
    dr_k_de[i] = -dnu_t_de * PiD4 + 1.0;
    disp = c_2 * epsilon[i] * epsilon[i] / (k[i] + div_eps);
    ddisp_dk = -c_2 * epsilon[i] * epsilon[i] / (k[i] * k[i] + div_eps);
    ddisp_de = 2.0 * c_2 * epsilon[i] / (k[i] + div_eps);
    if (disp < 0.0) {
      disp = 0.0;
      ddisp_dk = 0.0;
      ddisp_de = 0.0;
    }
    r_e[i] = -c_1 * k[i] * PiD4 + disp;
    dr_e_dk[i] = -c_1 * PiD4 + ddisp_dk;
    dr_e_de[i] = ddisp_de;
  }
}
```