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

```asm
<smath>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x450,%rsp
  mov    %rdi,-0x438(%rbp)
  mov    %rsi,-0x440(%rbp)
  mov    %edx,-0x444(%rbp)
  movss  %xmm0,-0x448(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x1,-0x424(%rbp)
  jmp    L57
L140:
  pxor   %xmm1,%xmm1
  cvtsi2ssl -0x424(%rbp),%xmm1
  movss  D6(%rip),%xmm0
  mulss  %xmm1,%xmm0
  mov    -0x444(%rbp),%eax
  add    $0x1,%eax
  add    %eax,%eax
  pxor   %xmm1,%xmm1
  cvtsi2ss %eax,%xmm1
  divss  %xmm1,%xmm0
  cvttss2si %xmm0,%eax
  mov    %eax,%edi
  call   <cos@plt>
  pxor   %xmm2,%xmm2
  cvtsi2ss %rax,%xmm2
  movss  D118(%rip),%xmm0
  movaps %xmm0,%xmm1
  subss  %xmm2,%xmm1
  mov    -0x424(%rbp),%eax
  sub    $0x1,%eax
  movss  D0(%rip),%xmm0
  mulss  %xmm1,%xmm0
  cltq
  movss  %xmm0,-0x3f0(%rbp,%rax,4)
  addl   $0x1,-0x424(%rbp)
L57:
  mov    -0x444(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  cmp    %eax,-0x424(%rbp)
  jle    L140
  mov    -0x444(%rbp),%eax
  cltq
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x3f0(%rbp,%rax,4)
  movl   $0x0,-0x424(%rbp)
  jmp    L224
L37:
  mov    -0x424(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x440(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  movss  -0x3f0(%rbp),%xmm0
  mulss  %xmm1,%xmm0
  mov    -0x424(%rbp),%eax
  cltq
  movss  %xmm0,-0x3d0(%rbp,%rax,4)
  addl   $0x1,-0x424(%rbp)
L224:
  cmpl   $0x4f,-0x424(%rbp)
  jle    L37
  movl   $0x1,-0x420(%rbp)
  jmp    L178
L15:
  mov    -0x420(%rbp),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  shl    $0x4,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x440(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x3f8(%rbp)
  movl   $0x0,-0x424(%rbp)
  jmp    L145
L67:
  mov    -0x424(%rbp),%eax
  cltq
  movss  -0x3d0(%rbp,%rax,4),%xmm1
  mov    -0x424(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x3f8(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm2
  mov    -0x420(%rbp),%eax
  cltq
  movss  -0x3f0(%rbp,%rax,4),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  mov    -0x424(%rbp),%eax
  cltq
  movss  %xmm0,-0x3d0(%rbp,%rax,4)
  addl   $0x1,-0x424(%rbp)
L145:
  cmpl   $0x4f,-0x424(%rbp)
  jle    L67
  addl   $0x1,-0x420(%rbp)
L178:
  mov    -0x420(%rbp),%eax
  cmp    -0x444(%rbp),%eax
  jl     L15
  mov    -0x444(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x420(%rbp)
  jmp    L198
L20:
  mov    -0x420(%rbp),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  shl    $0x4,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x440(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x3f8(%rbp)
  movl   $0x0,-0x424(%rbp)
  jmp    L79
L124:
  mov    -0x424(%rbp),%eax
  cltq
  movss  -0x3d0(%rbp,%rax,4),%xmm1
  mov    -0x424(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x3f8(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm2
  mov    -0x420(%rbp),%eax
  cltq
  movss  -0x3f0(%rbp,%rax,4),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  mov    -0x424(%rbp),%eax
  cltq
  movss  %xmm0,-0x3d0(%rbp,%rax,4)
  addl   $0x1,-0x424(%rbp)
L79:
  cmpl   $0x4f,-0x424(%rbp)
  jle    L124
  addl   $0x1,-0x420(%rbp)
L198:
  mov    -0x444(%rbp),%eax
  add    %eax,%eax
  cmp    %eax,-0x420(%rbp)
  jle    L20
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x414(%rbp)
  movss  -0x414(%rbp),%xmm0
  movss  %xmm0,-0x418(%rbp)
  movss  -0x418(%rbp),%xmm0
  movss  %xmm0,-0x41c(%rbp)
  mov    -0x444(%rbp),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  shl    $0x4,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x440(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x3f8(%rbp)
  movl   $0x0,-0x424(%rbp)
  jmp    L98
L131:
  mov    -0x424(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x3f8(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x424(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x3f8(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x41c(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x41c(%rbp)
  mov    -0x424(%rbp),%eax
  cltq
  movss  -0x3d0(%rbp,%rax,4),%xmm1
  mov    -0x424(%rbp),%eax
  cltq
  movss  -0x3d0(%rbp,%rax,4),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x414(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x414(%rbp)
  mov    -0x424(%rbp),%eax
  cltq
  movss  -0x3d0(%rbp,%rax,4),%xmm1
  mov    -0x424(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x3f8(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x418(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x418(%rbp)
  addl   $0x1,-0x424(%rbp)
L98:
  cmpl   $0x4f,-0x424(%rbp)
  jle    L131
  mov    -0x414(%rbp),%eax
  movd   %eax,%xmm0
  call   <fabs@plt>
  movsd  D77(%rip),%xmm1
  comisd %xmm0,%xmm1
  jbe    L191
  movss  D118(%rip),%xmm0
  movss  %xmm0,-0x414(%rbp)
L191:
  movss  -0x41c(%rbp),%xmm0
  divss  -0x414(%rbp),%xmm0
  movd   %xmm0,%eax
  movd   %eax,%xmm0
  call   <sqrt@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  movss  %xmm0,-0x404(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x408(%rbp)
  mov    -0x444(%rbp),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  shl    $0x4,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x440(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x3f8(%rbp)
  movl   $0x0,-0x424(%rbp)
  jmp    L169
L167:
  mov    -0x424(%rbp),%eax
  cltq
  movss  -0x3d0(%rbp,%rax,4),%xmm0
  mov    -0x424(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x438(%rbp),%rax
  add    %rdx,%rax
  mulss  -0x404(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x424(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x3f8(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x424(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x438(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x3fc(%rbp)
  movss  -0x3fc(%rbp),%xmm0
  mulss  %xmm0,%xmm0
  movss  -0x408(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x408(%rbp)
  addl   $0x1,-0x424(%rbp)
L169:
  cmpl   $0x4f,-0x424(%rbp)
  jle    L167
  movss  -0x448(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x41c(%rbp),%xmm1
  movss  -0x408(%rbp),%xmm0
  comiss %xmm1,%xmm0
  ja     L228
  jmp    L244
L228:
  movss  D118(%rip),%xmm0
  comiss -0x41c(%rbp),%xmm0
  jbe    L91
  movss  D118(%rip),%xmm0
  movss  %xmm0,-0x41c(%rbp)
L91:
  movss  -0x414(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x41c(%rbp),%xmm1
  movss  -0x418(%rbp),%xmm0
  mulss  %xmm0,%xmm0
  subss  %xmm0,%xmm1
  movss  -0x41c(%rbp),%xmm0
  movaps %xmm0,%xmm2
  mulss  %xmm0,%xmm2
  divss  %xmm2,%xmm1
  movaps %xmm1,%xmm0
  movss  %xmm0,-0x400(%rbp)
  pxor   %xmm0,%xmm0
  cvtss2sd -0x400(%rbp),%xmm0
  comisd D35(%rip),%xmm0
  jbe    L188
  movss  -0x448(%rbp),%xmm0
  mulss  %xmm0,%xmm0
  movss  D65(%rip),%xmm2
  movaps %xmm0,%xmm1
  divss  %xmm2,%xmm1
  movss  -0x448(%rbp),%xmm0
  subss  %xmm1,%xmm0
  divss  -0x400(%rbp),%xmm0
  movd   %xmm0,%eax
  movd   %eax,%xmm0
  call   <sqrt@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  movss  %xmm0,-0x410(%rbp)
  movss  -0x448(%rbp),%xmm0
  movss  D93(%rip),%xmm1
  xorps  %xmm1,%xmm0
  movss  D52(%rip),%xmm1
  divss  %xmm1,%xmm0
  movss  -0x410(%rbp),%xmm1
  mulss  -0x418(%rbp),%xmm1
  divss  -0x41c(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x40c(%rbp)
  movss  -0x40c(%rbp),%xmm1
  movss  D118(%rip),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x40c(%rbp)
  jmp    L72
L188:
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x410(%rbp)
  movss  D118(%rip),%xmm0
  movss  %xmm0,-0x40c(%rbp)
L72:
  mov    -0x444(%rbp),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  shl    $0x4,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x440(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x3f8(%rbp)
  movl   $0x0,-0x424(%rbp)
  jmp    L202
L195:
  mov    -0x424(%rbp),%eax
  cltq
  movss  -0x3d0(%rbp,%rax,4),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x410(%rbp),%xmm1
  mov    -0x424(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x3f8(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  -0x40c(%rbp),%xmm0
  mov    -0x424(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x438(%rbp),%rax
  add    %rdx,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x424(%rbp)
L202:
  cmpl   $0x4f,-0x424(%rbp)
  jle    L195
L244:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L42
  call   <__stack_chk_fail@plt>
L42:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: tag: D6
type_infered: byte[4]
name: unpack_data
arguments: tag: D118
type_infered: f32
name: unpack_data
arguments: tag: D0
type_infered: f32
name: unpack_data
arguments: tag: D77
type_infered: f32[2]
name: unpack_data
arguments: tag: D35
type_infered: f64[2]
name: unpack_data
arguments: tag: D65
type_infered: byte[4]
name: unpack_data
arguments: tag: D93
type_infered: byte[4]
name: unpack_data
arguments: tag: D52
type_infered: byte[4]

tool: {"D6": [0xdb,0x0f,0xc9,0x40]}

tool: D118: 1

tool: D0: 0.5

tool: {"D77": [0.0,1.875]}

tool: {"D35": [0.0001,5.34643471e-315]}

tool: {"D65": [0x00,0x00,0x80,0x40]}

tool: {"D93": [0x00,0x00,0x00,0x80]}

tool: {"D52": [0x00,0x00,0x00,0x40]}

assistant: ```c
void smath(float *odata, float *sseq, int hl, float alpha0) {
  int i, k;
  float w00, w10, w11, A, B, C, *psseq, err, errs;
  float surround[240];
  float wt[2 * 3 + 1];
  float denom;
  for (i = 1; i <= 2 * hl + 1; i++) {
    wt[i - 1] = (float)0.5 * (1 - (float)cos(2 * (float)3.14159265358979323846 * i / (2 * hl + 2)));
  }
  wt[hl] = 0.0;
  for (i = 0; i < 80; i++) {
    surround[i] = sseq[i] * wt[0];
  }
  for (k = 1; k < hl; k++) {
    psseq = sseq + k * 80;
    for (i = 0; i < 80; i++) {
      surround[i] += psseq[i] * wt[k];
    }
  }
  for (k = hl + 1; k <= 2 * hl; k++) {
    psseq = sseq + k * 80;
    for (i = 0; i < 80; i++) {
      surround[i] += psseq[i] * wt[k];
    }
  }
  w00 = w10 = w11 = 0.0;
  psseq = sseq + hl * 80;
  for (i = 0; i < 80; i++) {
    w00 += psseq[i] * psseq[i];
    w11 += surround[i] * surround[i];
    w10 += surround[i] * psseq[i];
  }
  if (fabs(w11) < 1.0) {
    w11 = 1.0;
  }
  C = (float)sqrt(w00 / w11);
  errs = 0.0;
  psseq = sseq + hl * 80;
  for (i = 0; i < 80; i++) {
    odata[i] = C * surround[i];
    err = psseq[i] - odata[i];
    errs += err * err;
  }
  if (errs > alpha0 * w00) {
    if (w00 < 1) {
      w00 = 1;
    }
    denom = (w11 * w00 - w10 * w10) / (w00 * w00);
    if (denom > 0.0001) {
      A = (float)sqrt((alpha0 - alpha0 * alpha0 / 4) / denom);
      B = -alpha0 / 2 - A * w10 / w00;
      B = B + 1;
    } else {
      A = 0.0;
      B = 1.0;
    }
    psseq = sseq + hl * 80;
    for (i = 0; i < 80; i++) {
      odata[i] = A * surround[i] + B * psseq[i];
    }
  }
}
```