user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<kEpsilon_epsilon_3D_Evaluate_sd>:
  endbr64
  push   %r15
  movslq %edi,%rax
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    0x68(%rsp),%r14
  mov    0x70(%rsp),%r12
  mov    %esi,-0x50(%rsp)
  mov    %rcx,-0x40(%rsp)
  mov    %r8,-0x38(%rsp)
  mov    %r9,-0x30(%rsp)
  test   %eax,%eax
  jle    L46
  mov    %esi,%ebx
  mov    %rax,-0x28(%rsp)
  mov    %rdx,%rbp
  movslq %esi,%rdx
  mov    %ebx,%eax
  lea    0x0(,%rdx,8),%rdi
  lea    -0x1(%rsi),%edx
  mov    %r14,%r10
  shr    %eax
  movapd %xmm2,%xmm10
  mov    %rdi,-0x20(%rsp)
  movapd %xmm0,%xmm6
  lea    -0x1(%rax),%r11d
  mov    0x78(%rsp),%rax
  mov    %edx,-0x4c(%rsp)
  mov    %rbp,%rsi
  movq   D27(%rip),%xmm9
  addsd  %xmm2,%xmm10
  add    $0x1,%r11
  xor    %r8d,%r8d
  add    $0x8,%rax
  lea    0x8(,%rdx,8),%rdi
  mov    %ebx,%edx
  mov    0x40(%rsp),%rcx
  mov    %rax,-0x18(%rsp)
  xorpd  %xmm9,%xmm1
  and    $0xfffffffe,%ebx
  movsd  D6(%rip),%xmm4
  mov    %rdi,-0x48(%rsp)
  movapd %xmm1,%xmm8
  mov    %ebx,%r9d
  shl    $0x4,%r11
  lea    0x0(,%rdx,8),%rdi
  mov    %r12,%rbx
  pxor   %xmm1,%xmm1
  xor    %edx,%edx
  movsd  D2(%rip),%xmm7
  mov    %rdi,-0x60(%rsp)
  xor    %edi,%edi
  nopl   0x0(%rax)
L118:
  mov    0x38(%rsp),%rax
  movsd  (%rcx),%xmm0
  movsd  (%rax,%rdi,8),%xmm12
  movapd %xmm0,%xmm13
  addsd  %xmm4,%xmm13
  movapd %xmm12,%xmm11
  mulsd  %xmm3,%xmm11
  mulsd  %xmm12,%xmm11
  movapd %xmm11,%xmm12
  divsd  %xmm13,%xmm12
  comisd %xmm12,%xmm1
  ja     L143
  movapd %xmm0,%xmm13
  xorpd  %xmm9,%xmm11
  mulsd  %xmm0,%xmm13
  addsd  %xmm4,%xmm13
  divsd  %xmm13,%xmm11
L76:
  mov    0x48(%rsp),%rax
  movsd  %xmm0,(%rax,%rdi,8)
  mov    0x50(%rsp),%rax
  movsd  %xmm7,(%rax,%rdi,8)
  mov    -0x50(%rsp),%eax
  test   %eax,%eax
  jle    L94
  lea    0x8(%rsi),%rax
  lea    0x8(%r10),%r13
  cmp    %rax,%rbx
  lea    0x8(%rcx),%r15
  setne  %al
  cmp    %r13,%rbx
  mov    %r15,-0x58(%rsp)
  setne  %r13b
  and    %eax,%r13d
  cmpl   $0x1,-0x4c(%rsp)
  seta   %al
  and    %eax,%r13d
  mov    -0x60(%rsp),%rax
  add    %r14,%rax
  cmp    %rax,%rcx
  setae  %al
  cmp    %r10,%r15
  setbe  %r15b
  or     %r15d,%eax
  and    %r13d,%eax
  mov    -0x60(%rsp),%r13
  add    %r12,%r13
  cmp    %r13,%rcx
  setae  %r13b
  cmp    %rbx,-0x58(%rsp)
  setbe  %r15b
  or     %r15d,%r13d
  test   %r13b,%al
  je     L154
  lea    0x10(%r10),%rax
  cmp    %rax,%rsi
  lea    0x10(%rsi),%rax
  setae  %r13b
  cmp    %rax,%r10
  setae  %al
  or     %r13b,%al
  je     L154
  movsd  (%rcx),%xmm13
  xor    %eax,%eax
  unpcklpd %xmm13,%xmm13
  nopl   0x0(%rax,%rax,1)
L53:
  movupd (%rsi,%rax,1),%xmm0
  mulpd  %xmm13,%xmm0
  movups %xmm0,(%r10,%rax,1)
  movupd (%rsi,%rax,1),%xmm0
  movups %xmm0,(%rbx,%rax,1)
  add    $0x10,%rax
  cmp    %r11,%rax
  jne    L53
  cmp    -0x50(%rsp),%r9d
  je     L169
  lea    (%r8,%r9,1),%eax
  movsd  (%rcx),%xmm0
  cltq
  lea    0x0(%rbp,%rax,8),%r13
  mulsd  0x0(%r13),%xmm0
  movsd  %xmm0,(%r14,%rax,8)
  movsd  0x0(%r13),%xmm0
  movsd  %xmm0,(%r12,%rax,8)
L169:
  movsd  (%rcx),%xmm0
  mov    0x58(%rsp),%rax
  divsd  %xmm6,%xmm11
  mov    0x80(%rsp),%r13
  movsd  %xmm0,(%rax,%rdi,8)
  movapd %xmm12,%xmm0
  mov    0x60(%rsp),%rax
  add    %rdx,%r13
  movsd  %xmm7,(%rax,%rdi,8)
  mov    -0x18(%rsp),%rax
  add    %rdx,%rax
  divsd  %xmm6,%xmm0
  addsd  %xmm5,%xmm0
  cmp    %rax,%r13
  je     L145
  cmpl   $0x3,-0x4c(%rsp)
  jbe    L145
  mov    0x78(%rsp),%r15
  movapd %xmm0,%xmm13
  movapd %xmm11,%xmm12
  xor    %eax,%eax
  unpcklpd %xmm13,%xmm13
  unpcklpd %xmm12,%xmm12
  add    %rdx,%r15
  cs nopw 0x0(%rax,%rax,1)
L122:
  movups %xmm13,(%r15,%rax,1)
  movups %xmm12,0x0(%r13,%rax,1)
  add    $0x10,%rax
  cmp    %r11,%rax
  jne    L122
  cmp    -0x50(%rsp),%r9d
  je     L73
  mov    0x78(%rsp),%r15
  lea    (%r8,%r9,1),%eax
  cltq
  movsd  %xmm0,(%r15,%rax,8)
  mov    0x80(%rsp),%r15
  movsd  %xmm11,(%r15,%rax,8)
L73:
  mov    -0x40(%rsp),%rax
  mov    -0x38(%rsp),%r15
  mov    -0x30(%rsp),%r13
  movsd  (%rax,%rdx,1),%xmm0
  movsd  0x8(%r15,%rdx,1),%xmm15
  movsd  0x10(%r13,%rdx,1),%xmm14
  movsd  0x8(%rax,%rdx,1),%xmm13
  mulsd  %xmm0,%xmm0
  addsd  (%r15,%rdx,1),%xmm13
  movsd  0x10(%rax,%rdx,1),%xmm12
  mulsd  %xmm15,%xmm15
  addsd  0x0(%r13,%rdx,1),%xmm12
  movsd  0x10(%r15,%rdx,1),%xmm11
  mulsd  %xmm14,%xmm14
  addsd  0x8(%r13,%rdx,1),%xmm11
  mov    0x38(%rsp),%rax
  mulsd  %xmm13,%xmm13
  mulsd  %xmm12,%xmm12
  mulsd  %xmm11,%xmm11
  addsd  %xmm15,%xmm0
  addsd  %xmm14,%xmm0
  addsd  %xmm0,%xmm0
  addsd  %xmm13,%xmm0
  addsd  %xmm12,%xmm0
  movsd  (%rcx),%xmm12
  movapd %xmm12,%xmm13
  mulsd  %xmm2,%xmm13
  addsd  %xmm11,%xmm0
  movsd  (%rax,%rdi,8),%xmm11
  movapd %xmm11,%xmm14
  addsd  %xmm4,%xmm14
  mulsd  %xmm12,%xmm13
  divsd  %xmm14,%xmm13
  comisd %xmm13,%xmm1
  ja     L112
  mulsd  %xmm10,%xmm12
  divsd  %xmm14,%xmm12
L11:
  mulsd  %xmm8,%xmm11
  mov    -0x58(%rsp),%rcx
  add    -0x50(%rsp),%r8d
  mov    0x88(%rsp),%rax
  mulsd  %xmm0,%xmm11
  addsd  %xmm13,%xmm11
  movsd  %xmm11,(%rax,%rdi,8)
  mov    0x90(%rsp),%rax
  movsd  %xmm12,(%rax,%rdi,8)
  mov    -0x20(%rsp),%rax
  add    $0x1,%rdi
  add    %rax,-0x48(%rsp)
  add    %rax,-0x60(%rsp)
  add    %rax,%rdx
  add    %rax,%r10
  add    %rax,%rbx
  add    %rax,%rsi
  cmp    %rdi,-0x28(%rsp)
  jne    L118
L46:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L112:
  movapd %xmm1,%xmm12
  movapd %xmm1,%xmm13
  jmp    L11
  nopl   0x0(%rax)
L143:
  movapd %xmm1,%xmm11
  movapd %xmm1,%xmm12
  jmp    L76
  nop
L145:
  mov    %rdx,-0x10(%rsp)
  mov    %rdx,%rax
  mov    0x78(%rsp),%r13
  mov    -0x48(%rsp),%rdx
  mov    0x80(%rsp),%r15
  nopw   0x0(%rax,%rax,1)
L69:
  movsd  %xmm0,0x0(%r13,%rax,1)
  movsd  %xmm11,(%r15,%rax,1)
  add    $0x8,%rax
  cmp    %rdx,%rax
  jne    L69
  mov    -0x10(%rsp),%rdx
  jmp    L73
L154:
  mov    -0x48(%rsp),%r13
  mov    %rdx,%rax
  nopl   0x0(%rax,%rax,1)
L137:
  movsd  (%rcx),%xmm0
  mulsd  0x0(%rbp,%rax,1),%xmm0
  movsd  %xmm0,(%r14,%rax,1)
  movsd  0x0(%rbp,%rax,1),%xmm0
  movsd  %xmm0,(%r12,%rax,1)
  add    $0x8,%rax
  cmp    %r13,%rax
  jne    L137
  jmp    L169
  nopw   0x0(%rax,%rax,1)
L94:
  movsd  (%rcx),%xmm0
  mov    0x58(%rsp),%rax
  movsd  %xmm0,(%rax,%rdi,8)
  mov    0x60(%rsp),%rax
  movsd  %xmm7,(%rax,%rdi,8)
  lea    0x8(%rcx),%rax
  mov    %rax,-0x58(%rsp)
  jmp    L73
```

tool_calls: name: extract_symbolic_data
arguments: label: D27
data_type: f32[2]
name: extract_symbolic_data
arguments: label: D6
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D2
data_type: f64

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

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

tool: D2: 1

assistant: ```c
void kEpsilon_epsilon_3D_Evaluate_sd(int nPoints, int nSpace, 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_e, double *dm_e, double *phi_e, double *dphi_e, double *f_e, double *df_e, double *a_e, double *da_e_de, double *r_e, double *dr_e_de) {
  int i, I;
  double nu_t, dnu_t_de, PiD4, eval, kval, disp, 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_de = -c_mu * k[i] * k[i] / (epsilon[i] * epsilon[i] + div_eps);
    if (nu_t < 0.0) {
      nu_t = 0.0;
      dnu_t_de = 0.0;
    }
    m_e[i] = epsilon[i];
    dm_e[i] = 1.0;
    for (I = 0; I < nSpace; I++) {
      f_e[i * nSpace + I] = epsilon[i] * velocity[i * nSpace + I];
      df_e[i * nSpace + I] = velocity[i * nSpace + I];
    }
    phi_e[i] = epsilon[i];
    dphi_e[i] = 1.0;
    for (I = 0; I < nSpace; I++) {
      a_e[i * nSpace + I] = nu_t / sigma_e + nu;
      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]);
    disp = c_2 * epsilon[i] * epsilon[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_de = 0.0;
    }
    r_e[i] = -c_1 * k[i] * PiD4 + disp;
    dr_e_de[i] = ddisp_de;
  }
}
```