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

```asm
<ATH_dB>:
  endbr64
  sub    $0x28,%rsp
  movaps %xmm0,%xmm2
  cvtss2sd %xmm0,%xmm0
  movss  %xmm1,0x18(%rsp)
  movsd  D58(%rip),%xmm1
  comisd %xmm0,%xmm1
  ja     L5
  movsd  D92(%rip),%xmm0
  pxor   %xmm3,%xmm3
  divss  D30(%rip),%xmm2
  cvtss2sd %xmm2,%xmm3
  comisd %xmm3,%xmm0
  jbe    L40
  movss  D110(%rip),%xmm2
  pxor   %xmm3,%xmm3
  cvtss2sd %xmm2,%xmm3
L32:
  movsd  D121(%rip),%xmm1
  movaps %xmm2,%xmm0
  movss  %xmm2,0x1c(%rsp)
  movsd  %xmm3,0x10(%rsp)
  call   <pow@plt>
  movsd  0x10(%rsp),%xmm3
  movsd  D2(%rip),%xmm1
  movsd  %xmm0,0x8(%rsp)
  movapd %xmm3,%xmm0
  subsd  D158(%rip),%xmm0
  cvtsd2ss %xmm0,%xmm0
  call   <pow@plt>
  mulsd  D14(%rip),%xmm0
  call   <exp@plt>
  movsd  0x8(%rsp),%xmm4
  mulsd  D162(%rip),%xmm0
  mulsd  D66(%rip),%xmm4
  mov    D2(%rip),%rax
  movsd  0x10(%rsp),%xmm3
  subsd  D146(%rip),%xmm3
  movq   %rax,%xmm1
  subsd  %xmm0,%xmm4
  pxor   %xmm0,%xmm0
  cvtsd2ss %xmm3,%xmm0
  movsd  %xmm4,0x8(%rsp)
  call   <pow@plt>
  mulsd  D50(%rip),%xmm0
  call   <exp@plt>
  mulsd  D138(%rip),%xmm0
  movss  0x1c(%rsp),%xmm2
  addsd  0x8(%rsp),%xmm0
  movsd  D174(%rip),%xmm1
  movsd  %xmm0,0x8(%rsp)
  movaps %xmm2,%xmm0
  call   <pow@plt>
  mulsd  D53(%rip),%xmm0
  addsd  0x8(%rsp),%xmm0
  cvtsd2ss %xmm0,%xmm0
  addss  0x18(%rsp),%xmm0
  add    $0x28,%rsp
  ret
  cs nopw 0x0(%rax,%rax,1)
L5:
  movss  D42(%rip),%xmm2
  pxor   %xmm3,%xmm3
  cvtss2sd %xmm2,%xmm3
  jmp    L32
L40:
  comiss D118(%rip),%xmm2
  jbe    L32
  movss  D118(%rip),%xmm2
  pxor   %xmm3,%xmm3
  cvtss2sd %xmm2,%xmm3
  jmp    L32
```

tool_calls: name: read_data
arguments: data_tag: D58
datatype: byte[8]
name: read_data
arguments: data_tag: D92
datatype: f64
name: read_data
arguments: data_tag: D30
datatype: byte[4]
name: read_data
arguments: data_tag: D110
datatype: byte[4]
name: read_data
arguments: data_tag: D121
datatype: byte[8]
name: read_data
arguments: data_tag: D2
datatype: f64
name: read_data
arguments: data_tag: D158
datatype: f64
name: read_data
arguments: data_tag: D14
datatype: byte[8]
name: read_data
arguments: data_tag: D162
datatype: f64
name: read_data
arguments: data_tag: D66
datatype: f64
name: read_data
arguments: data_tag: D146
datatype: f64
name: read_data
arguments: data_tag: D50
datatype: byte[8]
name: read_data
arguments: data_tag: D138
datatype: f64
name: read_data
arguments: data_tag: D174
datatype: f64
name: read_data
arguments: data_tag: D53
datatype: byte[8]
name: read_data
arguments: data_tag: D42
datatype: byte[4]
name: read_data
arguments: data_tag: D118
datatype: f32

tool: {"D58": [0x33,0x33,0x33,0x33,0x33,0x33,0xd3,0xbf]}

tool: D92: 0.01

tool: {"D30": [0x00,0x00,0x7a,0x44]}

tool: {"D110": [0x0a,0xd7,0x23,0x3c]}

tool: {"D121": [0x9a,0x99,0x99,0x99,0x99,0x99,0xe9,0xbf]}

tool: D2: 2

tool: D158: 3.4

tool: {"D14": [0x33,0x33,0x33,0x33,0x33,0x33,0xe3,0xbf]}

tool: D162: 6.8

tool: D66: 3.64

tool: D146: 8.7

tool: {"D50": [0x33,0x33,0x33,0x33,0x33,0x33,0xc3,0xbf]}

tool: D138: 6

tool: D174: 4

tool: {"D53": [0x61,0x32,0x55,0x30,0x2a,0xa9,0x43,0x3f]}

tool: {"D42": [0x71,0x3d,0x5a,0x40]}

tool: D118: 18

assistant: ```c
float ATH_dB(float f, float value) {
  float ath;
  float valueold = 0.0;
  if (f < -.3)
    f = 3410;
  f /= 1000;
  f = ((0.01) > (f) ? (0.01) : (f));
  f = ((18.0) < (f) ? (18.0) : (f));
  ath = 3.640 * pow(f, -0.8) - 6.800 * exp(-0.6 * pow(f - 3.4, 2.0)) + 6.000 * exp(-0.15 * pow(f - 8.7, 2.0)) + (0.6 + 0.04 * valueold) * 0.001 * pow(f, 4.0);
  return (ath + value);
}
```