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

```asm
<PopCSn0>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x30,%rsp
  movsd  %xmm0,0x10(%rsp)
  movsd  D49(%rip),%xmm0
  movsd  %xmm1,0x8(%rsp)
  cmp    %esi,%edi
  jge    L40
  add    $0x30,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopl   (%rax)
L40:
  pxor   %xmm4,%xmm4
  movsd  D32(%rip),%xmm1
  mov    %edi,%ebp
  mov    %esi,%r12d
  cvtsi2sd %edi,%xmm4
  movapd %xmm4,%xmm0
  movsd  %xmm4,0x18(%rsp)
  call   <pow@plt>
  movsd  0x10(%rsp),%xmm3
  movsd  0x8(%rsp),%xmm2
  pxor   %xmm4,%xmm4
  cvtsi2sd %eax,%xmm4
  mulsd  D59(%rip),%xmm4
  divsd  %xmm3,%xmm2
  pxor   %xmm3,%xmm3
  ucomisd %xmm2,%xmm3
  ja     L17
  sqrtsd %xmm2,%xmm2
  movapd %xmm2,%xmm1
L76:
  divsd  %xmm1,%xmm4
  movsd  D89(%rip),%xmm2
  movapd %xmm2,%xmm1
  movapd %xmm4,%xmm0
  call   <pow@plt>
  pxor   %xmm0,%xmm0
  movsd  D13(%rip),%xmm1
  add    $0x1,%eax
  cvtsi2sd %eax,%xmm0
  call   <pow@plt>
  pxor   %xmm0,%xmm0
  mov    %eax,%r8d
  mov    %ebp,%eax
  cltd
  idiv   %r8d
  cvtsi2sd %eax,%xmm0
  mov    D89(%rip),%rax
  movq   %rax,%xmm1
  movsd  %xmm0,0x10(%rsp)
  divsd  0x18(%rsp),%xmm0
  call   <pow@plt>
  pxor   %xmm0,%xmm0
  pxor   %xmm3,%xmm3
  mov    %eax,%r8d
  mov    $0x1,%eax
  sub    %r8d,%eax
  cvtsi2sd %eax,%xmm0
  mulsd  0x10(%rsp),%xmm0
  ucomisd %xmm0,%xmm3
  ja     L68
  sqrtsd %xmm0,%xmm0
L0:
  mulsd  D31(%rip),%xmm0
  movsd  D91(%rip),%xmm1
  divsd  %xmm0,%xmm1
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,0x20(%rsp)
  movsd  %xmm1,0x18(%rsp)
  test   %ebp,%ebp
  js     L78
  movsd  D80(%rip),%xmm4
  add    $0x1,%ebp
  xor    %ebx,%ebx
  movq   $0x0,0x8(%rsp)
  movsd  %xmm4,0x28(%rsp)
  nopl   0x0(%rax)
L57:
  pxor   %xmm0,%xmm0
  movsd  0x10(%rsp),%xmm1
  cvtsi2sd %ebx,%xmm0
  add    $0x1,%ebx
  subsd  %xmm0,%xmm1
  movsd  0x28(%rsp),%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  %xmm1,%xmm0
  divsd  0x20(%rsp),%xmm0
  call   <exp@plt>
  mulsd  0x18(%rsp),%xmm0
  addsd  0x8(%rsp),%xmm0
  movsd  %xmm0,0x8(%rsp)
  cmp    %ebp,%ebx
  jne    L57
L74:
  pxor   %xmm0,%xmm0
  movsd  0x10(%rsp),%xmm1
  cvtsi2sd %r12d,%xmm0
  subsd  %xmm0,%xmm1
  movsd  0x28(%rsp),%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  %xmm1,%xmm0
  divsd  0x20(%rsp),%xmm0
  call   <exp@plt>
  mulsd  0x18(%rsp),%xmm0
  divsd  0x8(%rsp),%xmm0
  add    $0x30,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopl   (%rax)
L78:
  movsd  D80(%rip),%xmm3
  movq   $0x0,0x8(%rsp)
  movsd  %xmm3,0x28(%rsp)
  jmp    L74
L68:
  call   <sqrt@plt>
  jmp    L0
L17:
  movapd %xmm2,%xmm0
  movsd  %xmm4,0x8(%rsp)
  call   <sqrt@plt>
  movsd  0x8(%rsp),%xmm4
  movapd %xmm0,%xmm1
  jmp    L76
```

tool_calls: name: disassemble_data
arguments: tag: D49
data_type: f32[2]
name: disassemble_data
arguments: tag: D32
data_type: f64
name: disassemble_data
arguments: tag: D59
data_type: f64
name: disassemble_data
arguments: tag: D89
data_type: f64
name: disassemble_data
arguments: tag: D13
data_type: f64
name: disassemble_data
arguments: tag: D31
data_type: f64
name: disassemble_data
arguments: tag: D91
data_type: f64
name: disassemble_data
arguments: tag: D80
data_type: f32[2]

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

tool: D32: 0.45

tool: D59: 0.26

tool: D89: 1.66666667

tool: D13: 0.6

tool: D31: 0.5

tool: D91: 0.39894228

tool: {"D80": [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;
}
```