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

```asm
<PopCSn0>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %edi,-0x34(%rbp)
  movsd  %xmm0,-0x40(%rbp)
  movsd  %xmm1,-0x48(%rbp)
  mov    %esi,-0x38(%rbp)
  movl   $0x0,-0x24(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x34(%rbp),%eax
  cmp    -0x38(%rbp),%eax
  jge    L37
  movsd  D7(%rip),%xmm0
  jmp    L20
L37:
  pxor   %xmm3,%xmm3
  cvtsi2sdl -0x34(%rbp),%xmm3
  movq   %xmm3,%rax
  movsd  D9(%rip),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  movsd  D24(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,-0x50(%rbp)
  movsd  -0x48(%rbp),%xmm0
  divsd  -0x40(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movsd  -0x50(%rbp),%xmm1
  divsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movsd  D58(%rip),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  add    $0x1,%eax
  pxor   %xmm4,%xmm4
  cvtsi2sd %eax,%xmm4
  movq   %xmm4,%rax
  movsd  D40(%rip),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  mov    %eax,%ecx
  mov    -0x34(%rbp),%eax
  cltd
  idiv   %ecx
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x34(%rbp),%xmm1
  movsd  -0x18(%rbp),%xmm0
  divsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movsd  D58(%rip),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  mov    $0x1,%edx
  sub    %eax,%edx
  pxor   %xmm0,%xmm0
  cvtsi2sd %edx,%xmm0
  mulsd  -0x18(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movsd  D36(%rip),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  D12(%rip),%xmm0
  divsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movl   $0x0,-0x24(%rbp)
  jmp    L30
L12:
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x24(%rbp),%xmm2
  movsd  -0x18(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D55(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x24(%rbp),%xmm2
  movsd  -0x18(%rbp),%xmm0
  subsd  %xmm2,%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x10(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  divsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <exp@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  mulsd  -0x8(%rbp),%xmm0
  movsd  -0x20(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  addl   $0x1,-0x24(%rbp)
L30:
  mov    -0x24(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jle    L12
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x38(%rbp),%xmm2
  movsd  -0x18(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D55(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x38(%rbp),%xmm2
  movsd  -0x18(%rbp),%xmm0
  subsd  %xmm2,%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x10(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  divsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <exp@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  mulsd  -0x8(%rbp),%xmm0
  divsd  -0x20(%rbp),%xmm0
L20:
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: read_data
arguments: data_label: D7
datatype: f32[2]
name: read_data
arguments: data_label: D9
datatype: f64
name: read_data
arguments: data_label: D24
datatype: f64
name: read_data
arguments: data_label: D58
datatype: f64
name: read_data
arguments: data_label: D40
datatype: f64
name: read_data
arguments: data_label: D36
datatype: f64
name: read_data
arguments: data_label: D12
datatype: f64
name: read_data
arguments: data_label: D55
datatype: f32[2]

tool: {"D7": [0.0,-1.875]}

tool: D9: 0.45

tool: D24: 0.26

tool: D58: 1.66666667

tool: D40: 0.6

tool: D36: 0.5

tool: D12: 0.39894228

tool: {"D55": [0.0,-1.75]}

assistant: ```c
double PopCSn0(int Z, double M, double E, int CSn) {
  int Q = 0;
  double Sum = 0, Q0 = 0, Width = 0, WP = 0;
  if (Z < CSn)
    return -1.0;
  Q0 = Z / pow(1 + pow(0.260 * pow(Z, 0.45) / sqrt(E / M), 1.66666667), 0.6);
  Width = 0.5 * sqrt(Q0 * (1 - pow(Q0 / Z, 1.66666667)));
  WP = 0.39894228 / Width;
  for (Q = 0; Q <= Z; Q++) {
    Sum += WP * exp(-0.5 * (Q0 - Q) * (Q0 - Q) / (Width * Width));
  };
  return WP * exp(-0.5 * (Q0 - CSn) * (Q0 - CSn) / (Width * Width)) / Sum;
}
```