user: 请从给定的汇编指令推导出C源代码：

```asm
<borch_ampf>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    %edx,-0x44(%rbp)
  mov    %rcx,-0x50(%rbp)
  mov    %r8,-0x58(%rbp)
  mov    %r9,-0x60(%rbp)
  mov    -0x50(%rbp),%rax
  movss  (%rax),%xmm0
  mov    -0x58(%rbp),%rax
  movss  (%rax),%xmm1
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x14(%rbp)
  mov    -0x60(%rbp),%rax
  movss  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D170(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L53
  movss  D201(%rip),%xmm0
  movss  %xmm0,-0x24(%rbp)
  movss  D34(%rip),%xmm0
  movss  %xmm0,-0x20(%rbp)
  jmp    L3
L53:
  mov    -0x60(%rbp),%rax
  movss  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D130(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L228
  mov    -0x60(%rbp),%rax
  movss  (%rax),%xmm0
  cvtss2sd %xmm0,%xmm0
  movsd  D170(%rip),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D26(%rip),%xmm0
  subsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x24(%rbp)
  mov    -0x60(%rbp),%rax
  movss  (%rax),%xmm0
  cvtss2sd %xmm0,%xmm0
  movsd  D170(%rip),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D191(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D246(%rip),%xmm0
  subsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x20(%rbp)
  jmp    L3
L228:
  mov    -0x60(%rbp),%rax
  movss  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D185(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L39
  mov    -0x60(%rbp),%rax
  movss  (%rax),%xmm0
  cvtss2sd %xmm0,%xmm0
  movsd  D130(%rip),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D30(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D23(%rip),%xmm0
  subsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x24(%rbp)
  mov    -0x60(%rbp),%rax
  movss  (%rax),%xmm0
  cvtss2sd %xmm0,%xmm0
  movsd  D130(%rip),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D105(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D152(%rip),%xmm0
  subsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x20(%rbp)
  jmp    L3
L39:
  mov    -0x60(%rbp),%rax
  movss  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D275(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L18
  mov    -0x60(%rbp),%rax
  movss  (%rax),%xmm0
  cvtss2sd %xmm0,%xmm0
  movsd  D185(%rip),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D30(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D170(%rip),%xmm0
  subsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x24(%rbp)
  mov    -0x60(%rbp),%rax
  movss  (%rax),%xmm0
  cvtss2sd %xmm0,%xmm0
  movsd  D185(%rip),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D279(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D291(%rip),%xmm0
  subsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x20(%rbp)
  jmp    L3
L18:
  movss  D139(%rip),%xmm0
  movss  %xmm0,-0x24(%rbp)
  movss  D250(%rip),%xmm0
  movss  %xmm0,-0x20(%rbp)
L3:
  mov    -0x14(%rbp),%eax
  movd   %eax,%xmm0
  call   <log@plt>
  movd   %xmm0,%eax
  movd   %eax,%xmm4
  mulss  -0x24(%rbp),%xmm4
  movd   %xmm4,%eax
  movd   %eax,%xmm0
  call   <exp@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x14(%rbp),%eax
  movd   %eax,%xmm0
  call   <log@plt>
  movd   %xmm0,%eax
  movd   %eax,%xmm5
  mulss  -0x20(%rbp),%xmm5
  movd   %xmm5,%eax
  movd   %eax,%xmm0
  call   <exp@plt>
  movd   %xmm0,%eax
  mov    %eax,-0xc(%rbp)
  mov    0x10(%rbp),%rax
  movss  (%rax),%xmm0
  mov    0x18(%rbp),%rax
  movss  (%rax),%xmm1
  comiss %xmm1,%xmm0
  jbe    L68
  mov    0x18(%rbp),%rax
  movss  (%rax),%xmm0
  mov    0x10(%rbp),%rax
  movss  %xmm0,(%rax)
L68:
  mov    0x38(%rbp),%rax
  movss  (%rax),%xmm1
  mov    0x30(%rbp),%rax
  movss  (%rax),%xmm0
  comiss %xmm1,%xmm0
  jbe    L12
  mov    0x30(%rbp),%rax
  movss  (%rax),%xmm0
  mov    0x10(%rbp),%rax
  movss  %xmm0,(%rax)
L12:
  pxor   %xmm1,%xmm1
  cvtsi2ssl -0x44(%rbp),%xmm1
  mov    -0x40(%rbp),%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  movss  D276(%rip),%xmm0
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x8(%rbp)
  movl   $0x1,-0x18(%rbp)
  jmp    L210
L138:
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x18(%rbp),%xmm0
  movss  -0x8(%rbp),%xmm1
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%rbp)
  mov    0x10(%rbp),%rax
  movss  (%rax),%xmm0
  comiss -0x4(%rbp),%xmm0
  jbe    L203
  movss  D276(%rip),%xmm0
  movss  %xmm0,-0x1c(%rbp)
  jmp    L24
L203:
  mov    0x18(%rbp),%rax
  movss  (%rax),%xmm0
  comiss -0x4(%rbp),%xmm0
  jbe    L118
  mov    0x10(%rbp),%rax
  movss  (%rax),%xmm1
  movss  -0x4(%rbp),%xmm0
  subss  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtss2sd -0xc(%rbp),%xmm0
  movsd  D127(%rip),%xmm2
  subsd  %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  mov    0x18(%rbp),%rax
  movss  (%rax),%xmm1
  mov    0x10(%rbp),%rax
  movss  (%rax),%xmm2
  subss  %xmm2,%xmm1
  pxor   %xmm2,%xmm2
  cvtss2sd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  movsd  D127(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x1c(%rbp)
  jmp    L24
L118:
  mov    0x20(%rbp),%rax
  movss  (%rax),%xmm0
  comiss -0x4(%rbp),%xmm0
  jbe    L200
  movss  -0xc(%rbp),%xmm0
  movss  %xmm0,-0x1c(%rbp)
  jmp    L24
L200:
  mov    0x28(%rbp),%rax
  movss  (%rax),%xmm0
  comiss -0x4(%rbp),%xmm0
  jbe    L224
  mov    0x20(%rbp),%rax
  movss  (%rax),%xmm2
  movss  -0x4(%rbp),%xmm0
  movaps %xmm0,%xmm1
  subss  %xmm2,%xmm1
  movss  -0x10(%rbp),%xmm0
  subss  -0xc(%rbp),%xmm0
  mulss  %xmm1,%xmm0
  mov    0x28(%rbp),%rax
  movss  (%rax),%xmm1
  mov    0x20(%rbp),%rax
  movss  (%rax),%xmm2
  subss  %xmm2,%xmm1
  divss  %xmm1,%xmm0
  movss  -0xc(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x1c(%rbp)
  jmp    L24
L224:
  mov    0x30(%rbp),%rax
  movss  (%rax),%xmm0
  comiss -0x4(%rbp),%xmm0
  jbe    L95
  movss  -0x10(%rbp),%xmm0
  movss  %xmm0,-0x1c(%rbp)
  jmp    L24
L95:
  mov    0x38(%rbp),%rax
  movss  (%rax),%xmm0
  comiss -0x4(%rbp),%xmm0
  jbe    L49
  pxor   %xmm2,%xmm2
  cvtss2sd -0x10(%rbp),%xmm2
  mov    0x30(%rbp),%rax
  movss  (%rax),%xmm1
  movss  -0x4(%rbp),%xmm0
  subss  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  pxor   %xmm3,%xmm3
  cvtss2sd -0x10(%rbp),%xmm3
  movsd  D127(%rip),%xmm0
  subsd  %xmm3,%xmm0
  mulsd  %xmm1,%xmm0
  mov    0x38(%rbp),%rax
  movss  (%rax),%xmm1
  mov    0x30(%rbp),%rax
  movss  (%rax),%xmm3
  subss  %xmm3,%xmm1
  cvtss2sd %xmm1,%xmm1
  divsd  %xmm1,%xmm0
  addsd  %xmm2,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x1c(%rbp)
  jmp    L24
L49:
  movss  D276(%rip),%xmm0
  movss  %xmm0,-0x1c(%rbp)
L24:
  mov    -0x18(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movss  -0x1c(%rbp),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x18(%rbp)
L210:
  mov    -0x44(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  cmp    %eax,-0x18(%rbp)
  jl     L138
  nop
  nop
  leave
  ret
```

tool_calls: name: parse_data
arguments: label: D170
datatype: f64
name: parse_data
arguments: label: D201
datatype: f32
name: parse_data
arguments: label: D34
datatype: f32
name: parse_data
arguments: label: D130
datatype: f64
name: parse_data
arguments: label: D26
datatype: byte[8]
name: parse_data
arguments: label: D191
datatype: f64
name: parse_data
arguments: label: D246
datatype: byte[8]
name: parse_data
arguments: label: D185
datatype: f64
name: parse_data
arguments: label: D30
datatype: f64
name: parse_data
arguments: label: D23
datatype: f64
name: parse_data
arguments: label: D105
datatype: f64
name: parse_data
arguments: label: D152
datatype: f64
name: parse_data
arguments: label: D275
datatype: f64
name: parse_data
arguments: label: D279
datatype: f64
name: parse_data
arguments: label: D291
datatype: f64
name: parse_data
arguments: label: D139
datatype: byte[4]
name: parse_data
arguments: label: D250
datatype: f32
name: parse_data
arguments: label: D276
datatype: f32
name: parse_data
arguments: label: D127
datatype: byte[8]

tool: D170: 0.1

tool: D201: 0.35

tool: D34: 0.65

tool: D130: 0.2

tool: {"D26": [0x66,0x66,0x66,0x66,0x66,0x66,0xd6,0x3f]}

tool: D191: 0.5

tool: {"D246": [0xcd,0xcc,0xcc,0xcc,0xcc,0xcc,0xe4,0x3f]}

tool: D185: 0.3

tool: D30: 1.5

tool: D23: 0.25

tool: D105: 0.7

tool: D152: 0.6

tool: D275: 0.4

tool: D279: 0.8

tool: D291: 0.53

tool: {"D139": [0xcd,0xcc,0x4c,0xbd]}

tool: D250: 0.45

tool: D276: 1

tool: {"D127": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

assistant: ```c
void borch_ampf(float *ampf, float *dt, int n, float *vref, float *vsite, float *pga, float *fmin, float *fmidbot, float *fmid, float *fhigh, float *fhightop, float *fmax) {
  float ma, mv, fa, fv, fac, df, freq;
  float vr;
  int i;
  vr = (*vref) / (*vsite);
  if (*pga < 0.1) {
    ma = 0.35;
    mv = 0.65;
  } else if (*pga < 0.2) {
    ma = 0.35 - (*pga - 0.1);
    mv = 0.65 - 0.5 * (*pga - 0.1);
  } else if (*pga < 0.3) {
    ma = 0.25 - 1.5 * (*pga - 0.2);
    mv = 0.60 - 0.7 * (*pga - 0.2);
  } else if (*pga < 0.4) {
    ma = 0.10 - 1.5 * (*pga - 0.3);
    mv = 0.53 - 0.8 * (*pga - 0.3);
  } else {
    ma = -0.05;
    mv = 0.45;
  }
  fa = exp(ma * log(vr));
  fv = exp(mv * log(vr));
  if (*fmin > *fmidbot)
    *fmin = *fmidbot;
  if (*fmax < *fhightop)
    *fmin = *fhightop;
  df = 1.0 / (n * (*dt));
  for (i = 1; i < n / 2; i++) {
    freq = i * df;
    if (freq < *fmin)
      fac = 1.0;
    else if (freq < *fmidbot)
      fac = 1.0 + (freq - *fmin) * (fv - 1.0) / (*fmidbot - *fmin);
    else if (freq < *fmid)
      fac = fv;
    else if (freq < *fhigh)
      fac = fv + (freq - *fmid) * (fa - fv) / (*fhigh - *fmid);
    else if (freq < *fhightop)
      fac = fa;
    else if (freq < *fmax)
      fac = fa + (freq - *fhightop) * (1.0 - fa) / (*fmax - *fhightop);
    else
      fac = 1.0;
    ampf[i] = fac;
  }
}
```