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

```asm
<smath>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x408,%rsp
  mov    %rdi,%rbx
  mov    %rsi,%rbp
  mov    %edx,%r13d
  movss  %xmm0,0xc(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0x3f8(%rsp)
  xor    %eax,%eax
  mov    %edx,%r12d
  add    %r12d,%r12d
  js     L151
  lea    0x2(%r12),%eax
  pxor   %xmm7,%xmm7
  cvtsi2ss %eax,%xmm7
  movss  %xmm7,(%rsp)
  mov    %r12d,%r15d
  add    $0x2,%r15
  mov    $0x1,%r14d
L93:
  pxor   %xmm0,%xmm0
  cvtsi2ss %r14d,%xmm0
  mulss  D43(%rip),%xmm0
  divss  (%rsp),%xmm0
  cvttss2si %xmm0,%edi
  call   <cos@plt>
  pxor   %xmm1,%xmm1
  cvtsi2ss %rax,%xmm1
  movss  D42(%rip),%xmm0
  subss  %xmm1,%xmm0
  mulss  D119(%rip),%xmm0
  movss  %xmm0,0xc(%rsp,%r14,4)
  add    $0x1,%r14
  cmp    %r15,%r14
  jne    L93
L151:
  movslq %r13d,%rax
  movl   $0x0,0x10(%rsp,%rax,4)
  movss  0x10(%rsp),%xmm1
  mov    $0x0,%eax
L33:
  movaps %xmm1,%xmm0
  mulss  0x0(%rbp,%rax,1),%xmm0
  movss  %xmm0,0x30(%rsp,%rax,1)
  add    $0x4,%rax
  cmp    $0x140,%rax
  jne    L33
  cmp    $0x1,%r13d
  jle    L38
  lea    0x10(%rsp),%rsi
  lea    0x140(%rbp),%rdi
  lea    -0x2(%r13),%eax
  lea    0x14(%rsp,%rax,4),%r8
  lea    0x170(%rsp),%rcx
L81:
  movss  0x4(%rsi),%xmm1
  lea    0x30(%rsp),%rax
  mov    %rdi,%rdx
L134:
  movaps %xmm1,%xmm0
  mulss  (%rdx),%xmm0
  addss  (%rax),%xmm0
  movss  %xmm0,(%rax)
  add    $0x4,%rax
  add    $0x4,%rdx
  cmp    %rcx,%rax
  jne    L134
  add    $0x4,%rsi
  add    $0x140,%rdi
  cmp    %r8,%rsi
  jne    L81
L38:
  lea    0x1(%r13),%eax
  cmp    %r12d,%eax
  jg     L167
  movslq %eax,%rsi
  lea    (%rax,%rax,4),%edi
  shl    $0x4,%edi
  movslq %edi,%rdi
  lea    0x170(%rsp),%rcx
L145:
  movss  0x10(%rsp,%rsi,4),%xmm1
  lea    0x30(%rsp),%rax
  lea    0x0(%rbp,%rdi,4),%rdx
L197:
  movaps %xmm1,%xmm0
  mulss  (%rdx),%xmm0
  addss  (%rax),%xmm0
  movss  %xmm0,(%rax)
  add    $0x4,%rax
  add    $0x4,%rdx
  cmp    %rcx,%rax
  jne    L197
  add    $0x1,%rsi
  add    $0x50,%rdi
  cmp    %esi,%r12d
  jge    L145
L167:
  lea    0x0(%r13,%r13,4),%eax
  shl    $0x4,%eax
  cltq
  lea    0x0(%rbp,%rax,4),%rbp
  mov    $0x0,%eax
  pxor   %xmm7,%xmm7
  movss  %xmm7,0x4(%rsp)
  movss  %xmm7,0x8(%rsp)
  movss  %xmm7,(%rsp)
L87:
  movss  0x0(%rbp,%rax,1),%xmm0
  movaps %xmm0,%xmm1
  mulss  %xmm0,%xmm1
  addss  (%rsp),%xmm1
  movss  %xmm1,(%rsp)
  movss  0x30(%rsp,%rax,1),%xmm1
  movaps %xmm1,%xmm2
  mulss  %xmm1,%xmm2
  addss  0x4(%rsp),%xmm2
  movss  %xmm2,0x4(%rsp)
  mulss  %xmm1,%xmm0
  addss  0x8(%rsp),%xmm0
  movss  %xmm0,0x8(%rsp)
  add    $0x4,%rax
  cmp    $0x140,%rax
  jne    L87
  movaps %xmm2,%xmm0
  call   <fabs@plt>
  movsd  D83(%rip),%xmm1
  comisd %xmm0,%xmm1
  ja     L34
L136:
  movss  (%rsp),%xmm0
  divss  0x4(%rsp),%xmm0
  call   <sqrt@plt>
  pxor   %xmm3,%xmm3
  cvtsi2ss %rax,%xmm3
  mov    $0x0,%eax
  pxor   %xmm2,%xmm2
  lea    0x30(%rsp),%rdx
L133:
  movaps %xmm3,%xmm1
  mulss  (%rax,%rdx,1),%xmm1
  movss  %xmm1,(%rbx,%rax,1)
  movss  0x0(%rbp,%rax,1),%xmm0
  subss  %xmm1,%xmm0
  mulss  %xmm0,%xmm0
  addss  %xmm0,%xmm2
  add    $0x4,%rax
  cmp    $0x140,%rax
  jne    L133
  movss  0xc(%rsp),%xmm0
  movss  (%rsp),%xmm7
  mulss  %xmm7,%xmm0
  comiss %xmm0,%xmm2
  jbe    L52
  movss  D42(%rip),%xmm0
  comiss %xmm7,%xmm0
  ja     L121
L85:
  movss  0x4(%rsp),%xmm1
  movss  (%rsp),%xmm7
  mulss  %xmm7,%xmm1
  movss  0x8(%rsp),%xmm3
  movaps %xmm3,%xmm0
  mulss  %xmm3,%xmm0
  subss  %xmm0,%xmm1
  movaps %xmm7,%xmm0
  mulss  %xmm7,%xmm0
  divss  %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtss2sd %xmm1,%xmm0
  movss  D42(%rip),%xmm2
  pxor   %xmm3,%xmm3
  comisd D107(%rip),%xmm0
  ja     L73
L183:
  mov    $0x0,%eax
  lea    0x30(%rsp),%rdx
L56:
  movaps %xmm3,%xmm0
  mulss  (%rax,%rdx,1),%xmm0
  movaps %xmm2,%xmm1
  mulss  0x0(%rbp,%rax,1),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rbx,%rax,1)
  add    $0x4,%rax
  cmp    $0x140,%rax
  jne    L56
L52:
  mov    0x3f8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L37
  add    $0x408,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L34:
  movss  D42(%rip),%xmm7
  movss  %xmm7,0x4(%rsp)
  jmp    L136
L121:
  movss  %xmm0,(%rsp)
  jmp    L85
L73:
  movss  0xc(%rsp),%xmm7
  movaps %xmm7,%xmm2
  mulss  %xmm7,%xmm2
  mulss  D118(%rip),%xmm2
  movaps %xmm7,%xmm0
  subss  %xmm2,%xmm0
  divss  %xmm1,%xmm0
  call   <sqrt@plt>
  pxor   %xmm3,%xmm3
  cvtsi2ss %rax,%xmm3
  movss  0xc(%rsp),%xmm7
  xorps  D63(%rip),%xmm7
  movaps %xmm7,%xmm2
  mulss  D119(%rip),%xmm2
  movss  0x8(%rsp),%xmm0
  mulss  %xmm3,%xmm0
  divss  (%rsp),%xmm0
  subss  %xmm0,%xmm2
  addss  D42(%rip),%xmm2
  jmp    L183
L37:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: label: D43
type_guessed: byte[4]
name: retrieve_data
arguments: label: D42
type_guessed: f32
name: retrieve_data
arguments: label: D119
type_guessed: f32
name: retrieve_data
arguments: label: D83
type_guessed: f32[2]
name: retrieve_data
arguments: label: D107
type_guessed: f64[2]
name: retrieve_data
arguments: label: D118
type_guessed: byte[4]
name: retrieve_data
arguments: label: D63
type_guessed: byte[16]

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

tool: D42: 1

tool: D119: 0.5

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

tool: {"D107": [0.0001,1.0609978955e-314]}

tool: {"D118": [0x00,0x00,0x80,0x3e]}

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

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