user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<convolved_fit>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0xb8,%rsp
  mov    %rdi,-0x88(%rbp)
  mov    %rsi,-0x90(%rbp)
  mov    %edx,-0x94(%rbp)
  mov    %rcx,-0xa0(%rbp)
  mov    %r8,-0xa8(%rbp)
  mov    %r9d,-0x98(%rbp)
  movsd  %xmm0,-0xb0(%rbp)
  movsd  %xmm1,-0xb8(%rbp)
  cmpl   $0x0,0x10(%rbp)
  je     L198
  pxor   %xmm0,%xmm0
  ucomisd -0xb0(%rbp),%xmm0
  jp     L214
  pxor   %xmm0,%xmm0
  ucomisd -0xb0(%rbp),%xmm0
  je     L198
L214:
  mov    -0x98(%rbp),%eax
  cltq
  shl    $0x3,%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    %rax,-0x40(%rbp)
  mov    -0x98(%rbp),%eax
  cltq
  shl    $0x3,%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    %rax,-0x38(%rbp)
  mov    $0x8008,%edi
  call   <malloc@plt>
  mov    %rax,-0x30(%rbp)
  movl   $0x0,-0x7c(%rbp)
  jmp    L139
L95:
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x7c(%rbp),%xmm0
  movsd  D23(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  D32(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x18(%rbp),%xmm1
  movsd  D47(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  -0x18(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <exp@plt>
  movq   %xmm0,%rax
  mov    -0x7c(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x30(%rbp),%rdx
  add    %rcx,%rdx
  movsd  D30(%rip),%xmm1
  movq   %rax,%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,(%rdx)
  addl   $0x1,-0x7c(%rbp)
L139:
  cmpl   $0x1000,-0x7c(%rbp)
  jle    L95
  movl   $0x0,-0x74(%rbp)
  jmp    L190
L8:
  movl   $0x0,-0x70(%rbp)
  mov    -0x98(%rbp),%eax
  mov    %eax,-0x6c(%rbp)
  mov    -0x94(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movsd  D15(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x68(%rbp)
  mov    -0x94(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x90(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movq   %rax,%xmm0
  mov    $0xa,%edi
  call   <pow@plt>
  mov    -0x94(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x94(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x10(%rax),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm2
  subsd  %xmm2,%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  mov    -0x40(%rbp),%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  movl   $0x1,-0x7c(%rbp)
  jmp    L249
L218:
  mov    -0x7c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x7c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  jp     L241
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  je     L174
L241:
  mov    -0x7c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  jp     L174
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  jne    L174
  mov    -0x7c(%rbp),%eax
  mov    %eax,-0x70(%rbp)
L174:
  mov    -0x7c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  jp     L220
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  jne    L220
  mov    -0x7c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  jp     L246
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  je     L220
L246:
  mov    -0x7c(%rbp),%eax
  mov    %eax,-0x6c(%rbp)
L220:
  addl   $0x1,-0x7c(%rbp)
L249:
  mov    -0x7c(%rbp),%eax
  cmp    -0x98(%rbp),%eax
  jl     L218
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x50(%rbp)
  jmp    L149
L30:
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  mov    -0x70(%rbp),%eax
  mov    %eax,-0x78(%rbp)
  jmp    L112
L188:
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movsd  -0x68(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  mov    -0x78(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x38(%rbp),%rdx
  lea    (%rcx,%rdx,1),%rbx
  mov    -0x30(%rbp),%rdx
  movsd  -0xb0(%rbp),%xmm0
  mov    %rdx,%rdi
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <gaussian_cache@plt>
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xa8(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x48(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  addl   $0x1,-0x78(%rbp)
L112:
  mov    -0x78(%rbp),%eax
  cmp    -0x6c(%rbp),%eax
  jl     L188
  movsd  -0x48(%rbp),%xmm0
  mulsd  -0xb8(%rbp),%xmm0
  movsd  -0x50(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x50(%rbp)
  mov    -0x50(%rbp),%rax
  movq   %rax,%xmm0
  call   <isfinite@plt>
  test   %eax,%eax
  jne    L121
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x50(%rbp)
L121:
  mov    -0x70(%rbp),%eax
  mov    %eax,-0x78(%rbp)
  jmp    L55
L122:
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movapd %xmm0,%xmm2
  mulsd  -0xb8(%rbp),%xmm2
  mov    -0x94(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm2,%xmm0
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x78(%rbp)
L55:
  mov    -0x78(%rbp),%eax
  cmp    -0x6c(%rbp),%eax
  jl     L122
  movsd  -0x68(%rbp),%xmm0
  subsd  -0xb8(%rbp),%xmm0
  movsd  %xmm0,-0x68(%rbp)
L149:
  movsd  -0x60(%rbp),%xmm0
  comisd -0x50(%rbp),%xmm0
  ja     L30
  mov    -0x60(%rbp),%rax
  movq   %rax,%xmm0
  call   <log10@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x58(%rbp)
  mov    -0x94(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x7c(%rbp)
  jmp    L256
L260:
  mov    -0x7c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x90(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movq   %rax,%xmm0
  mov    $0xa,%edi
  call   <pow@plt>
  movq   %xmm0,%rbx
  mov    -0x7c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x90(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movq   %rax,%xmm0
  mov    $0xa,%edi
  call   <pow@plt>
  movq   %rbx,%xmm1
  subsd  %xmm0,%xmm1
  mov    -0x7c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x7c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm2
  subsd  %xmm2,%xmm0
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,-0xc0(%rbp)
  mov    $0xa,%edi
  call   <log@plt>
  mov    -0x7c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x90(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x7c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x90(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm2
  subsd  %xmm2,%xmm1
  mulsd  %xmm0,%xmm1
  movsd  -0xc0(%rbp),%xmm0
  divsd  %xmm1,%xmm0
  movsd  -0x60(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0x28(%rbp),%rax
  movq   %rax,%xmm0
  call   <log10@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x20(%rbp)
  jmp    L71
L197:
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  mov    -0x70(%rbp),%eax
  mov    %eax,-0x78(%rbp)
  jmp    L312
L313:
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xa0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movsd  -0x68(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  mov    -0x78(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x38(%rbp),%rdx
  lea    (%rcx,%rdx,1),%rbx
  mov    -0x30(%rbp),%rdx
  movsd  -0xb0(%rbp),%xmm0
  mov    %rdx,%rdi
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <gaussian_cache@plt>
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xa8(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x48(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  addl   $0x1,-0x78(%rbp)
L312:
  mov    -0x78(%rbp),%eax
  cmp    -0x6c(%rbp),%eax
  jl     L313
  movsd  -0x48(%rbp),%xmm0
  mulsd  -0xb8(%rbp),%xmm0
  movsd  -0x50(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x50(%rbp)
  mov    -0x7c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm3
  movsd  %xmm3,-0xc0(%rbp)
  mov    -0x50(%rbp),%rax
  movq   %rax,%xmm0
  call   <log10@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  subsd  -0x20(%rbp),%xmm0
  movsd  -0x58(%rbp),%xmm1
  movapd %xmm1,%xmm2
  subsd  -0x20(%rbp),%xmm2
  movapd %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  mov    -0x7c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x7c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm2
  subsd  %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  addsd  -0xc0(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  mov    -0x70(%rbp),%eax
  mov    %eax,-0x78(%rbp)
  jmp    L143
L62:
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  -0x18(%rbp),%xmm0
  mulsd  -0xb8(%rbp),%xmm0
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x78(%rbp)
L143:
  mov    -0x78(%rbp),%eax
  cmp    -0x6c(%rbp),%eax
  jl     L62
  movsd  -0x68(%rbp),%xmm0
  subsd  -0xb8(%rbp),%xmm0
  movsd  %xmm0,-0x68(%rbp)
L71:
  movsd  -0x28(%rbp),%xmm0
  comisd -0x50(%rbp),%xmm0
  jbe    L123
  movsd  -0x68(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jae    L197
L123:
  movsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  subl   $0x1,-0x7c(%rbp)
L256:
  cmpl   $0x0,-0x7c(%rbp)
  jg     L260
  mov    -0x70(%rbp),%eax
  mov    %eax,-0x78(%rbp)
  jmp    L56
L171:
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%rbp),%rax
  add    %rax,%rdx
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0xa0(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  addl   $0x1,-0x78(%rbp)
L56:
  mov    -0x78(%rbp),%eax
  cmp    -0x6c(%rbp),%eax
  jl     L171
  addl   $0x1,-0x74(%rbp)
L190:
  mov    -0x74(%rbp),%eax
  cmp    0x10(%rbp),%eax
  jl     L8
  mov    -0x40(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  jmp    L279
L198:
  nop
L279:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: unpack_data
arguments: label: D23
type_infered: byte[8]
name: unpack_data
arguments: label: D32
type_infered: byte[8]
name: unpack_data
arguments: label: D47
type_infered: byte[8]
name: unpack_data
arguments: label: D30
type_infered: byte[8]
name: unpack_data
arguments: label: D15
type_infered: byte[8]

tool: {"D23": [0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x40]}

tool: {"D32": [0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x40]}

tool: {"D47": [0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xbf]}

tool: {"D30": [0xed,0xeb,0xf4,0x1f,0x93,0x0d,0x04,0x40]}

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

assistant: ```c
void convolved_fit(double *af_key, double *af_val, int num_af_points, double *smm, double *mf, int MASS_BINS, double scatter, int repeat, double sm_step) {
  if (!repeat || !scatter)
    return;
  int i, j, k, jstart, jend;
  double sm, fid_sm;
  double nh, new_nh, lnh, lnnh, mnh, sum;
  double *new_smm = (double *)malloc(MASS_BINS * sizeof(double));
  double *smm_conv = (double *)malloc(MASS_BINS * sizeof(double));
  double *g_cache = (double *)malloc(4097 * sizeof(double));
  for (i = 0; i < 4097; i++) {
    sm = ((double)i) / 256 - 8;
    g_cache[i] = exp(-0.5 * sm * sm) / sqrt(2.0 * 3.1415926535);
  }
  for (k = 0; k < repeat; ++k) {
    jstart = 0;
    jend = MASS_BINS;
    fid_sm = af_key[num_af_points - 1] + 1;
    nh = pow(10, af_val[num_af_points - 1]) * (af_key[num_af_points - 1] - af_key[num_af_points - 2]);
    new_smm[0] = 0;
    for (i = 1; i < MASS_BINS; i++) {
      new_smm[i] = 0;
      if (smm[i] && !smm[i - 1])
        jstart = i;
      if (!smm[i] && smm[i - 1])
        jend = i;
    }
    mnh = 0;
    while (mnh < nh) {
      sum = 0;
      for (j = jstart; j < jend; j++) {
        smm_conv[j] = gaussian_cache(fid_sm - smm[j], scatter, g_cache);
        sum += smm_conv[j] * mf[j];
      }
      mnh += sum * sm_step;
      if (!isfinite(mnh))
        mnh = 0;
      for (j = jstart; j < jend; j++) {
        new_smm[j] += smm_conv[j] * sm_step * af_key[num_af_points - 1];
      }
      fid_sm -= sm_step;
    }
    lnh = log10(nh);
    for (i = num_af_points - 1; i > 0; i--) {
      new_nh = nh + (pow(10, af_val[i - 1]) - pow(10, af_val[i])) * (af_key[i] - af_key[i - 1]) / (log(10) * (af_val[i - 1] - af_val[i]));
      lnnh = log10(new_nh);
      while (mnh < new_nh && fid_sm >= 0) {
        sum = 0;
        for (j = jstart; j < jend; j++) {
          smm_conv[j] = gaussian_cache(fid_sm - smm[j], scatter, g_cache);
          sum += smm_conv[j] * mf[j];
        }
        mnh += sum * sm_step;
        sm = af_key[i - 1] + (log10(mnh) - lnnh) / (lnh - lnnh) * (af_key[i] - af_key[i - 1]);
        for (j = jstart; j < jend; j++)
          new_smm[j] += smm_conv[j] * sm * sm_step;
        fid_sm -= sm_step;
      }
      nh = new_nh;
      lnh = lnnh;
    }
    for (j = jstart; j < jend; j++)
      smm[j] = new_smm[j];
  }
  free(new_smm);
  free(smm_conv);
  free(g_cache);
}
```