user: Please show me the C implementation that matches the assembly code listed below:

```asm
<populate_Diffusion>:
  endbr64
  push   %r15
  push   %r14
  mov    $0x328,%r14d
  push   %r13
  mov    %r8,%r13
  push   %r12
  mov    %r9,%r12
  lea    0x320(%r13),%r15
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  mov    %rsi,%rbx
  sub    $0x38,%rsp
  movsd  %xmm0,0x10(%rsp)
  mulsd  D21(%rip),%xmm0
  divsd  D32(%rip),%xmm0
  movsd  %xmm0,0x8(%rsp)
  movsd  0x328(%r8),%xmm0
  subsd  0x320(%r8),%xmm0
  mov    %rdx,0x20(%rsp)
  mov    %rcx,0x28(%rsp)
  call   <square@plt>
  movapd %xmm0,%xmm1
  movsd  0x8(%rsp),%xmm0
  divsd  %xmm1,%xmm0
  mulsd  0x320(%r12),%xmm0
  movsd  %xmm0,0x320(%rbp)
  nopl   0x0(%rax,%rax,1)
L5:
  movsd  0x8(%r15),%xmm0
  subsd  (%r15),%xmm0
  add    $0x8,%r15
  divsd  0x10(%rsp),%xmm0
  call   <exp@plt>
  pxor   %xmm0,%xmm0
  movsd  0x8(%rsp),%xmm1
  cvtsi2sd %eax,%xmm0
  mulsd  -0x8(%rbp,%r14,1),%xmm0
  movsd  %xmm0,(%rbx,%r14,1)
  mulsd  (%r12,%r14,1),%xmm1
  movsd  (%r15),%xmm0
  subsd  -0x8(%r15),%xmm0
  movsd  %xmm1,0x18(%rsp)
  call   <square@plt>
  mulsd  (%rbx,%r14,1),%xmm0
  movsd  0x18(%rsp),%xmm1
  subsd  %xmm0,%xmm1
  movsd  0x8(%r15),%xmm0
  subsd  (%r15),%xmm0
  movsd  %xmm1,0x18(%rsp)
  call   <square@plt>
  movsd  0x18(%rsp),%xmm1
  divsd  %xmm0,%xmm1
  movsd  %xmm1,0x0(%rbp,%r14,1)
  add    $0x8,%r14
  cmp    $0x458,%r14
  jne    L5
  movsd  0x458(%r13),%xmm0
  lea    0x588(%r13),%r14
  subsd  0x450(%r13),%xmm0
  divsd  0x10(%rsp),%xmm0
  call   <exp@plt>
  pxor   %xmm0,%xmm0
  movsd  0x8(%rsp),%xmm1
  mov    $0x590,%r15d
  cvtsi2sd %eax,%xmm0
  mulsd  0x450(%rbp),%xmm0
  movsd  %xmm0,0x458(%rbx)
  mulsd  0x458(%r12),%xmm1
  movsd  0x458(%r13),%xmm0
  subsd  0x450(%r13),%xmm0
  movsd  %xmm1,0x18(%rsp)
  call   <square@plt>
  mulsd  0x458(%rbx),%xmm0
  movsd  0x18(%rsp),%xmm1
  movsd  D40(%rip),%xmm5
  subsd  0x458(%r13),%xmm5
  subsd  %xmm0,%xmm1
  movapd %xmm5,%xmm0
  movsd  %xmm1,0x18(%rsp)
  call   <square@plt>
  movsd  0x18(%rsp),%xmm1
  movsd  D40(%rip),%xmm6
  divsd  %xmm0,%xmm1
  movsd  %xmm1,0x458(%rbp)
  subsd  0x458(%r13),%xmm6
  movapd %xmm6,%xmm0
  divsd  0x10(%rsp),%xmm0
  call   <exp@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  divsd  D47(%rip),%xmm0
  mov    0x28(%rsp),%rax
  mulsd  0x458(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movsd  0x598(%r13),%xmm0
  subsd  0x590(%r13),%xmm0
  call   <square@plt>
  movapd %xmm0,%xmm1
  movsd  0x8(%rsp),%xmm0
  divsd  %xmm1,%xmm0
  mulsd  0x598(%r12),%xmm0
  movsd  %xmm0,0x598(%rbx)
  nopl   0x0(%rax)
L9:
  movsd  0x8(%r14),%xmm0
  subsd  0x10(%r14),%xmm0
  sub    $0x8,%r14
  divsd  0x10(%rsp),%xmm0
  call   <exp@plt>
  pxor   %xmm0,%xmm0
  movsd  0x8(%rsp),%xmm1
  cvtsi2sd %eax,%xmm0
  mulsd  0x8(%rbx,%r15,1),%xmm0
  movsd  %xmm0,0x0(%rbp,%r15,1)
  mulsd  (%r12,%r15,1),%xmm1
  movsd  0x18(%r14),%xmm0
  subsd  0x10(%r14),%xmm0
  movsd  %xmm1,0x18(%rsp)
  call   <square@plt>
  mulsd  0x0(%rbp,%r15,1),%xmm0
  movsd  0x18(%rsp),%xmm1
  subsd  %xmm0,%xmm1
  movsd  0x10(%r14),%xmm0
  subsd  0x8(%r14),%xmm0
  movsd  %xmm1,0x18(%rsp)
  call   <square@plt>
  movsd  0x18(%rsp),%xmm1
  divsd  %xmm0,%xmm1
  movsd  %xmm1,(%rbx,%r15,1)
  sub    $0x8,%r15
  cmp    $0x460,%r15
  jne    L9
  movsd  0x460(%r13),%xmm0
  subsd  0x468(%r13),%xmm0
  divsd  0x10(%rsp),%xmm0
  call   <exp@plt>
  pxor   %xmm0,%xmm0
  movsd  0x8(%rsp),%xmm5
  cvtsi2sd %eax,%xmm0
  mulsd  0x468(%rbx),%xmm0
  movsd  %xmm0,0x460(%rbp)
  mulsd  0x460(%r12),%xmm5
  movsd  0x468(%r13),%xmm0
  subsd  0x460(%r13),%xmm0
  movq   %xmm5,%r12
  call   <square@plt>
  mulsd  0x460(%rbp),%xmm0
  movq   %r12,%xmm6
  subsd  %xmm0,%xmm6
  movsd  0x460(%r13),%xmm0
  subsd  D40(%rip),%xmm0
  movq   %xmm6,%r12
  call   <square@plt>
  movq   %r12,%xmm1
  divsd  %xmm0,%xmm1
  movsd  D40(%rip),%xmm0
  movsd  %xmm1,0x460(%rbx)
  subsd  0x460(%r13),%xmm0
  divsd  0x10(%rsp),%xmm0
  call   <exp@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  divsd  D47(%rip),%xmm0
  mov    0x20(%rsp),%rax
  mulsd  0x460(%rbx),%xmm0
  movsd  %xmm0,(%rax)
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: parse_data
arguments: data_label: D21
type: byte[8]
name: parse_data
arguments: data_label: D32
type: f64
name: parse_data
arguments: data_label: D40
type: f64
name: parse_data
arguments: data_label: D47
type: f64

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

tool: D32: 938782998.31

tool: D40: 10.198714553953742

tool: D47: 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];
}
```