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

```asm
<populate_Diffusion>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x38,%rsp
  mov    %rdi,%r13
  mov    %rsi,%r12
  mov    %rdx,0x20(%rsp)
  mov    %rcx,0x28(%rsp)
  movsd  %xmm0,0x10(%rsp)
  mov    %r8,%r15
  mov    %r9,%r14
  mulsd  D11(%rip),%xmm0
  divsd  D36(%rip),%xmm0
  movsd  %xmm0,0x8(%rsp)
  movsd  0x328(%r8),%xmm0
  subsd  0x320(%r8),%xmm0
  call   <square@plt>
  movapd %xmm0,%xmm1
  movsd  0x8(%rsp),%xmm0
  divsd  %xmm1,%xmm0
  mulsd  0x320(%r14),%xmm0
  movsd  %xmm0,0x320(%r13)
  lea    0x320(%r15),%rbp
  mov    $0x328,%ebx
L18:
  movsd  0x8(%rbp),%xmm0
  subsd  0x0(%rbp),%xmm0
  divsd  0x10(%rsp),%xmm0
  call   <exp@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  -0x8(%r13,%rbx,1),%xmm0
  movsd  %xmm0,(%r12,%rbx,1)
  movsd  0x8(%rsp),%xmm2
  mulsd  (%r14,%rbx,1),%xmm2
  movsd  %xmm2,0x18(%rsp)
  movsd  0x8(%rbp),%xmm0
  subsd  0x0(%rbp),%xmm0
  call   <square@plt>
  mulsd  (%r12,%rbx,1),%xmm0
  movsd  0x18(%rsp),%xmm2
  subsd  %xmm0,%xmm2
  movsd  %xmm2,0x18(%rsp)
  movsd  0x10(%rbp),%xmm0
  subsd  0x8(%rbp),%xmm0
  call   <square@plt>
  movapd %xmm0,%xmm1
  movsd  0x18(%rsp),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,0x0(%r13,%rbx,1)
  add    $0x8,%rbp
  add    $0x8,%rbx
  cmp    $0x458,%rbx
  jne    L18
  movsd  0x458(%r15),%xmm0
  subsd  0x450(%r15),%xmm0
  divsd  0x10(%rsp),%xmm0
  call   <exp@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  0x450(%r13),%xmm0
  movsd  %xmm0,0x458(%r12)
  movsd  0x8(%rsp),%xmm6
  mulsd  0x458(%r14),%xmm6
  movq   %xmm6,%rbx
  movsd  0x458(%r15),%xmm0
  subsd  0x450(%r15),%xmm0
  call   <square@plt>
  mulsd  0x458(%r12),%xmm0
  movq   %rbx,%xmm4
  subsd  %xmm0,%xmm4
  movq   %xmm4,%rbx
  movsd  D27(%rip),%xmm5
  subsd  0x458(%r15),%xmm5
  movapd %xmm5,%xmm0
  call   <square@plt>
  movq   %rbx,%xmm1
  divsd  %xmm0,%xmm1
  movsd  %xmm1,0x458(%r13)
  movsd  D27(%rip),%xmm4
  subsd  0x458(%r15),%xmm4
  movapd %xmm4,%xmm0
  divsd  0x10(%rsp),%xmm0
  call   <exp@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  divsd  D25(%rip),%xmm0
  mulsd  0x458(%r13),%xmm0
  mov    0x28(%rsp),%rax
  movsd  %xmm0,(%rax)
  movsd  0x598(%r15),%xmm0
  subsd  0x590(%r15),%xmm0
  call   <square@plt>
  movapd %xmm0,%xmm1
  movsd  0x8(%rsp),%xmm0
  divsd  %xmm1,%xmm0
  mulsd  0x598(%r14),%xmm0
  movsd  %xmm0,0x598(%r12)
  lea    0x588(%r15),%rbp
  mov    $0x590,%ebx
L8:
  movsd  0x8(%rbp),%xmm0
  subsd  0x10(%rbp),%xmm0
  divsd  0x10(%rsp),%xmm0
  call   <exp@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  0x8(%r12,%rbx,1),%xmm0
  movsd  %xmm0,0x0(%r13,%rbx,1)
  movsd  0x8(%rsp),%xmm3
  mulsd  (%r14,%rbx,1),%xmm3
  movsd  %xmm3,0x18(%rsp)
  movsd  0x10(%rbp),%xmm0
  subsd  0x8(%rbp),%xmm0
  call   <square@plt>
  mulsd  0x0(%r13,%rbx,1),%xmm0
  movsd  0x18(%rsp),%xmm3
  subsd  %xmm0,%xmm3
  movsd  %xmm3,0x18(%rsp)
  movsd  0x8(%rbp),%xmm0
  subsd  0x0(%rbp),%xmm0
  call   <square@plt>
  movapd %xmm0,%xmm1
  movsd  0x18(%rsp),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,(%r12,%rbx,1)
  sub    $0x8,%rbp
  sub    $0x8,%rbx
  cmp    $0x460,%rbx
  jne    L8
  movsd  0x460(%r15),%xmm0
  subsd  0x468(%r15),%xmm0
  divsd  0x10(%rsp),%xmm0
  call   <exp@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  0x468(%r12),%xmm0
  movsd  %xmm0,0x460(%r13)
  movsd  0x8(%rsp),%xmm7
  mulsd  0x460(%r14),%xmm7
  movq   %xmm7,%rbx
  movsd  0x468(%r15),%xmm0
  subsd  0x460(%r15),%xmm0
  call   <square@plt>
  mulsd  0x460(%r13),%xmm0
  movq   %rbx,%xmm7
  subsd  %xmm0,%xmm7
  movq   %xmm7,%rbx
  movsd  0x460(%r15),%xmm0
  subsd  D27(%rip),%xmm0
  call   <square@plt>
  movq   %rbx,%xmm1
  divsd  %xmm0,%xmm1
  movsd  %xmm1,0x460(%r12)
  movsd  D27(%rip),%xmm0
  subsd  0x460(%r15),%xmm0
  divsd  0x10(%rsp),%xmm0
  call   <exp@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  divsd  D25(%rip),%xmm0
  mulsd  0x460(%r12),%xmm0
  mov    0x20(%rsp),%rax
  movsd  %xmm0,(%rax)
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D11
datatype: byte[8]
name: extract_symbolic_data
arguments: label: D36
datatype: f64
name: extract_symbolic_data
arguments: label: D27
datatype: f64
name: extract_symbolic_data
arguments: label: D25
datatype: f64

tool: {"D11": [0x05,0xa9,0x70,0xbf,0xe1,0x00,0x6a,0x40]}

tool: D36: 938782998.31

tool: D27: 10.198714553953742

tool: D25: 3

assistant: ```c
void populate_Diffusion(double *Aup, double *Adn, double *A2p_up, double *A2p_dn, double TM, double Eb_tab[311], double A1s_tab[311]) {
  unsigned b;
  double DE2;
  DE2 = 10.198714553953742 * 10.198714553953742 * 2. * TM / 0.93878299831e9;
  b = 140 - 80 / 2;
  Aup[b] = DE2 / square(Eb_tab[b + 1] - Eb_tab[b]) * A1s_tab[b];
  for (b = 140 - 80 / 2 + 1; b < 140 - 1; b++) {
    Adn[b] = exp((Eb_tab[b] - Eb_tab[b - 1]) / TM) * Aup[b - 1];
    Aup[b] = (DE2 * A1s_tab[b] - square(Eb_tab[b] - Eb_tab[b - 1]) * Adn[b]) / square(Eb_tab[b + 1] - Eb_tab[b]);
  }
  b = 140 - 1;
  Adn[b] = exp((Eb_tab[b] - Eb_tab[b - 1]) / TM) * Aup[b - 1];
  Aup[b] = (DE2 * A1s_tab[b] - square(Eb_tab[b] - Eb_tab[b - 1]) * Adn[b]) / square(10.198714553953742 - Eb_tab[b]);
  *A2p_dn = exp((10.198714553953742 - Eb_tab[b]) / TM) / 3. * Aup[b];
  b = 140 + 80 / 2 - 1;
  Adn[b] = DE2 / square(Eb_tab[b] - Eb_tab[b - 1]) * A1s_tab[b];
  for (b = 140 + 80 / 2 - 2; b > 140; b--) {
    Aup[b] = exp((Eb_tab[b] - Eb_tab[b + 1]) / TM) * Adn[b + 1];
    Adn[b] = (DE2 * A1s_tab[b] - square(Eb_tab[b + 1] - Eb_tab[b]) * Aup[b]) / square(Eb_tab[b] - Eb_tab[b - 1]);
  }
  b = 140;
  Aup[b] = exp((Eb_tab[b] - Eb_tab[b + 1]) / TM) * Adn[b + 1];
  Adn[b] = (DE2 * A1s_tab[b] - square(Eb_tab[b + 1] - Eb_tab[b]) * Aup[b]) / square(Eb_tab[b] - 10.198714553953742);
  *A2p_up = exp((10.198714553953742 - Eb_tab[b]) / TM) / 3. * Adn[b];
}
```