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

```asm
<GCI_Phasor>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  movss  %xmm0,-0x44(%rbp)
  mov    %rdi,-0x50(%rbp)
  mov    %esi,-0x48(%rbp)
  mov    %edx,-0x54(%rbp)
  mov    %rcx,-0x60(%rbp)
  mov    %r8,-0x68(%rbp)
  mov    %r9,-0x70(%rbp)
  movl   $0x0,-0x24(%rbp)
  mov    -0x48(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x50(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x54(%rbp),%eax
  sub    -0x48(%rbp),%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x60(%rbp),%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x1c(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  jne    L82
  mov    $0xffffffff,%eax
  jmp    L207
L82:
  cmpl   $0x0,-0x20(%rbp)
  jns    L184
  mov    $0xfffffffe,%eax
  jmp    L207
L184:
  pxor   %xmm1,%xmm1
  cvtsi2ssl -0x20(%rbp),%xmm1
  movss  D89(%rip),%xmm0
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x18(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x20(%rbp),%xmm0
  mulss  -0x44(%rbp),%xmm0
  movd   %xmm0,%eax
  movd   %eax,%xmm0
  call   <setPhasorPeriod@plt>
  movl   $0x0,-0x3c(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x30(%rbp)
  jmp    L200
L73:
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  subss  -0x1c(%rbp),%xmm0
  movss  -0x30(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x30(%rbp)
  addl   $0x1,-0x3c(%rbp)
L200:
  mov    -0x3c(%rbp),%eax
  cmp    -0x20(%rbp),%eax
  jl     L73
  movl   $0x0,-0x3c(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x38(%rbp)
  jmp    L165
L270:
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  subss  -0x1c(%rbp),%xmm0
  movss  %xmm0,-0x58(%rbp)
  pxor   %xmm1,%xmm1
  cvtsi2ssl -0x3c(%rbp),%xmm1
  movss  D66(%rip),%xmm0
  addss  %xmm1,%xmm0
  movaps %xmm0,%xmm3
  mulss  -0x18(%rbp),%xmm3
  movd   %xmm3,%eax
  movd   %eax,%xmm0
  call   <cosf@plt>
  mulss  -0x58(%rbp),%xmm0
  movss  -0x38(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x38(%rbp)
  addl   $0x1,-0x3c(%rbp)
L165:
  mov    -0x3c(%rbp),%eax
  cmp    -0x20(%rbp),%eax
  jl     L270
  movss  -0x38(%rbp),%xmm0
  divss  -0x30(%rbp),%xmm0
  movss  %xmm0,-0x38(%rbp)
  movl   $0x0,-0x3c(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x34(%rbp)
  jmp    L136
L145:
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  subss  -0x1c(%rbp),%xmm0
  movss  %xmm0,-0x58(%rbp)
  pxor   %xmm1,%xmm1
  cvtsi2ssl -0x3c(%rbp),%xmm1
  movss  D66(%rip),%xmm0
  addss  %xmm1,%xmm0
  movaps %xmm0,%xmm5
  mulss  -0x18(%rbp),%xmm5
  movd   %xmm5,%eax
  movd   %eax,%xmm0
  call   <sinf@plt>
  mulss  -0x58(%rbp),%xmm0
  movss  -0x34(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x34(%rbp)
  addl   $0x1,-0x3c(%rbp)
L136:
  mov    -0x3c(%rbp),%eax
  cmp    -0x20(%rbp),%eax
  jl     L145
  movss  -0x34(%rbp),%xmm0
  divss  -0x30(%rbp),%xmm0
  movss  %xmm0,-0x34(%rbp)
  movss  -0x44(%rbp),%xmm0
  movaps %xmm0,%xmm1
  divss  -0x18(%rbp),%xmm1
  movss  -0x34(%rbp),%xmm0
  divss  -0x38(%rbp),%xmm0
  mulss  %xmm1,%xmm0
  mov    0x10(%rbp),%rax
  movss  %xmm0,(%rax)
  movss  -0x44(%rbp),%xmm0
  divss  -0x18(%rbp),%xmm0
  movss  %xmm0,-0x58(%rbp)
  movss  -0x38(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  %xmm0,%xmm1
  movss  -0x34(%rbp),%xmm0
  mulss  %xmm0,%xmm0
  addss  %xmm0,%xmm1
  movss  D12(%rip),%xmm0
  divss  %xmm1,%xmm0
  movss  D12(%rip),%xmm1
  movaps %xmm0,%xmm7
  subss  %xmm1,%xmm7
  movd   %xmm7,%eax
  movd   %eax,%xmm0
  call   <sqrtf@plt>
  mulss  -0x58(%rbp),%xmm0
  mov    0x18(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    0x10(%rbp),%rax
  movss  (%rax),%xmm1
  mov    0x18(%rbp),%rax
  movss  (%rax),%xmm0
  addss  %xmm1,%xmm0
  movss  D62(%rip),%xmm1
  divss  %xmm1,%xmm0
  mov    0x20(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    -0x68(%rbp),%rax
  movss  -0x38(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x70(%rbp),%rax
  movss  -0x34(%rbp),%xmm0
  movss  %xmm0,(%rax)
  cmpq   $0x0,0x28(%rbp)
  jne    L214
  mov    $0x0,%eax
  jmp    L207
L214:
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x28(%rbp),%rax
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x30(%rbp),%rax
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x2c(%rbp)
  mov    -0x48(%rbp),%eax
  mov    %eax,-0x3c(%rbp)
  jmp    L76
L46:
  mov    -0x48(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  mulss  -0x44(%rbp),%xmm0
  mov    0x20(%rbp),%rax
  movss  (%rax),%xmm1
  divss  %xmm1,%xmm0
  movd   %xmm0,%eax
  movd   %eax,%xmm0
  call   <expf@plt>
  movss  -0x2c(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x2c(%rbp)
  addl   $0x1,-0x3c(%rbp)
L76:
  mov    -0x3c(%rbp),%eax
  cmp    -0x54(%rbp),%eax
  jl     L46
  movss  -0x30(%rbp),%xmm0
  divss  -0x2c(%rbp),%xmm0
  movss  %xmm0,-0x14(%rbp)
  mov    -0x48(%rbp),%eax
  mov    %eax,-0x3c(%rbp)
  jmp    L100
L105:
  mov    -0x48(%rbp),%eax
  sub    -0x3c(%rbp),%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  mulss  -0x44(%rbp),%xmm0
  mov    0x20(%rbp),%rax
  movss  (%rax),%xmm1
  divss  %xmm1,%xmm0
  movd   %xmm0,%eax
  movd   %eax,%xmm0
  call   <expf@plt>
  movd   %xmm0,%eax
  movd   %eax,%xmm0
  mulss  -0x14(%rbp),%xmm0
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x28(%rbp),%rax
  add    %rdx,%rax
  addss  -0x1c(%rbp),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x3c(%rbp)
L100:
  mov    -0x3c(%rbp),%eax
  cmp    -0x54(%rbp),%eax
  jl     L105
  cmpq   $0x0,0x30(%rbp)
  jne    L123
  cmpq   $0x0,0x38(%rbp)
  jne    L123
  mov    $0x0,%eax
  jmp    L207
L123:
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x28(%rbp)
  movl   $0x0,-0x3c(%rbp)
  jmp    L24
L15:
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x50(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x10(%rbp)
  cmpq   $0x0,0x30(%rbp)
  je     L216
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x30(%rbp),%rax
  add    %rdx,%rax
  movss  -0x10(%rbp),%xmm0
  movss  %xmm0,(%rax)
L216:
  addl   $0x1,-0x3c(%rbp)
L24:
  mov    -0x3c(%rbp),%eax
  cmp    -0x48(%rbp),%eax
  jl     L15
  mov    -0x48(%rbp),%eax
  mov    %eax,-0x3c(%rbp)
  jmp    L104
L134:
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x50(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x10(%rbp)
  cmpq   $0x0,0x30(%rbp)
  je     L75
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x30(%rbp),%rax
  add    %rdx,%rax
  movss  -0x10(%rbp),%xmm0
  movss  %xmm0,(%rax)
L75:
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  movss  D12(%rip),%xmm1
  comiss %xmm1,%xmm0
  jbe    L275
  mov    -0x3c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  movss  D12(%rip),%xmm0
  divss  %xmm1,%xmm0
  jmp    L131
L275:
  movss  D12(%rip),%xmm0
L131:
  movss  %xmm0,-0xc(%rbp)
  movss  -0x10(%rbp),%xmm0
  mulss  %xmm0,%xmm0
  mulss  -0xc(%rbp),%xmm0
  movss  -0x28(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x28(%rbp)
  addl   $0x1,-0x3c(%rbp)
L104:
  mov    -0x3c(%rbp),%eax
  cmp    -0x54(%rbp),%eax
  jl     L134
  cmpq   $0x0,0x38(%rbp)
  je     L99
  mov    0x38(%rbp),%rax
  movss  -0x28(%rbp),%xmm0
  movss  %xmm0,(%rax)
L99:
  mov    -0x24(%rbp),%eax
L207:
  leave
  ret
```

tool_calls: name: read_data
arguments: data_tag: D89
data_type: byte[4]
name: read_data
arguments: data_tag: D66
data_type: byte[4]
name: read_data
arguments: data_tag: D12
data_type: byte[4]
name: read_data
arguments: data_tag: D62
data_type: byte[4]

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

tool: {"D66": [0x00,0x00,0x00,0x3f]}

tool: {"D12": [0x00,0x00,0x80,0x3f]}

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

assistant: ```c
int GCI_Phasor(float xincr, float y[], int fit_start, int fit_end, float *Z, float *U, float *V, float *taup, float *taum, float *tau, float *fitted, float *residuals, float *chisq) {
  int i, ret = 0, nBins;
  float *data, u, v, A, w, I, Ifit, bg, chisq_local, res, sigma2;
  data = &(y[fit_start]);
  nBins = (fit_end - fit_start);
  bg = *Z;
  if (!data)
    return (-1);
  if (nBins < 0)
    return (-2);
  w = 2.0f * 3.1415926535897932384626433832795028841971f / (float)nBins;
  setPhasorPeriod((float)nBins * xincr);
  for (i = 0, I = 0.0f; i < nBins; i++)
    I += (data[i] - bg);
  for (i = 0, u = 0.0f; i < nBins; i++)
    u += (data[i] - bg) * cosf(w * ((float)i + 0.5f));
  u /= I;
  for (i = 0, v = 0.0f; i < nBins; i++)
    v += (data[i] - bg) * sinf(w * ((float)i + 0.5f));
  v /= I;
  *taup = (xincr / w) * (v / u);
  *taum = (xincr / w) * sqrtf(1.0f / (u * u + v * v) - 1.0f);
  *tau = ((*taup) + (*taum)) / 2.0f;
  *U = u;
  *V = v;
  if (fitted == 0)
    return 0;
  memset(fitted, 0, (size_t)fit_end * sizeof(float));
  memset(residuals, 0, (size_t)fit_end * sizeof(float));
  for (Ifit = 0.0f, i = fit_start; i < fit_end; i++)
    Ifit += expf((float)(-(i - fit_start)) * xincr / (*tau));
  A = I / Ifit;
  for (i = fit_start; i < fit_end; i++) {
    fitted[i] = bg + A * expf((float)(-(i - fit_start)) * xincr / (*tau));
  }
  if (residuals == 0 && chisq == 0)
    return 0;
  chisq_local = 0.0f;
  for (i = 0; i < fit_start; i++) {
    res = y[i] - fitted[i];
    if (residuals != 0)
      residuals[i] = res;
  }
  for (i = fit_start; i < fit_end; i++) {
    res = y[i] - fitted[i];
    if (residuals != 0)
      residuals[i] = res;
    sigma2 = (fitted[i] > 1 ? 1.0f / fitted[i] : 1.0f);
    chisq_local += res * res * sigma2;
  }
  if (chisq != 0)
    *chisq = chisq_local;
  return (ret);
}
```