user: Converte this assembly snippet into its equivalent C code:

```asm
<pumas_electronic_dcs>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  movsd  %xmm0,-0x58(%rbp)
  movsd  %xmm1,-0x60(%rbp)
  movsd  %xmm2,-0x68(%rbp)
  movsd  %xmm3,-0x70(%rbp)
  movsd  %xmm4,-0x78(%rbp)
  movsd  -0x68(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  addsd  -0x70(%rbp),%xmm0
  movsd  -0x70(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x70(%rbp),%xmm0
  addsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x48(%rbp),%xmm1
  movsd  D23(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x68(%rbp),%xmm0
  movapd %xmm0,%xmm2
  mulsd  %xmm0,%xmm2
  movsd  -0x40(%rbp),%xmm0
  movapd %xmm0,%xmm3
  addsd  %xmm0,%xmm3
  movsd  D66(%rip),%xmm0
  addsd  %xmm0,%xmm3
  movsd  D66(%rip),%xmm0
  mulsd  %xmm3,%xmm0
  addsd  %xmm0,%xmm2
  divsd  %xmm2,%xmm1
  movapd %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  -0x78(%rbp),%xmm0
  comisd -0x38(%rbp),%xmm0
  jbe    L15
  pxor   %xmm0,%xmm0
  jmp    L14
L15:
  movsd  -0x60(%rbp),%xmm1
  movsd  D17(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x30(%rbp),%xmm0
  comisd -0x78(%rbp),%xmm0
  jb     L4
  pxor   %xmm0,%xmm0
  jmp    L14
L4:
  movsd  -0x40(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x48(%rbp),%xmm0
  divsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  D67(%rip),%xmm0
  divsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x20(%rbp),%xmm0
  divsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x58(%rbp),%xmm1
  movsd  D9(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D22(%rip),%xmm0
  movapd %xmm0,%xmm2
  divsd  -0x78(%rbp),%xmm2
  movsd  D22(%rip),%xmm0
  divsd  -0x78(%rbp),%xmm0
  subsd  -0x10(%rbp),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  -0x18(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  divsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
L14:
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  pop    %rbp
  ret
```

tool_calls: name: read_data
arguments: label: D23
type_infered: byte[8]
name: read_data
arguments: label: D66
type_infered: byte[8]
name: read_data
arguments: label: D17
type_infered: byte[8]
name: read_data
arguments: label: D67
type_infered: f64
name: read_data
arguments: label: D9
type_infered: byte[8]
name: read_data
arguments: label: D22
type_infered: f64

tool: {"D23": [0xd6,0xb5,0xa9,0xcd,0x91,0xbe,0x50,0x3f]}

tool: {"D66": [0xd6,0xb5,0xa9,0xcd,0x91,0xbe,0x40,0x3f]}

tool: {"D17": [0xab,0xaa,0xaa,0xaa,0xaa,0xaa,0xe6,0x3f]}

tool: D67: 0.5

tool: {"D9": [0xce,0xef,0x1a,0x56,0x2a,0x8c,0x60,0x39]}

tool: D22: 1

assistant: ```c
double pumas_electronic_dcs(double Z, double I, double m, double K, double q) {
  const double P2 = K * (K + 2. * m);
  const double E = K + m;
  const double Wmax = 2. * 0.510998910E-03 * P2 / (m * m + 0.510998910E-03 * (0.510998910E-03 + 2. * E));
  if (q > Wmax)
    return 0.;
  const double Wmin = (13.6 / 19.2) * I;
  if (q <= Wmin)
    return 0.;
  const double E2 = E * E;
  const double beta2 = P2 / E2;
  const double a0 = 0.5 / E2;
  const double a1 = beta2 / Wmax;
  const double cs = 2 * 3.14159265358979323846 * 0.510998910E-03 * 2.817940285E-15 * 2.817940285E-15 * Z * (a0 + 1. / q * (1 / q - a1)) / beta2;
  return cs;
}
```