user: 下面的汇编指令对应的C源代码是什么:

```asm
<GCI_Phasor>:
  endbr64
  push   %r15
  movslq %esi,%rax
  push   %r14
  push   %r13
  mov    %rdi,%r13
  mov    %rax,%rdi
  push   %r12
  push   %rbp
  mov    %rax,%rbp
  push   %rbx
  sub    $0x58,%rsp
  movss  (%rcx),%xmm7
  mov    %eax,0x28(%rsp)
  mov    0xa8(%rsp),%r12
  mov    %rax,0x48(%rsp)
  shl    $0x2,%rax
  mov    %edx,0x20(%rsp)
  sub    %edi,%edx
  mov    %r8,0x30(%rsp)
  mov    %r9,0x38(%rsp)
  mov    %rax,0x40(%rsp)
  movss  %xmm0,0x1c(%rsp)
  movss  %xmm7,0x4(%rsp)
  add    %r13,%rax
  je     L493
  mov    %edx,%ebx
  test   %ebx,%ebx
  js     L429
  movaps %xmm0,%xmm4
  pxor   %xmm0,%xmm0
  movss  D3(%rip),%xmm1
  mov    %rax,%r15
  cvtsi2ss %ebx,%xmm0
  divss  %xmm0,%xmm1
  mulss  %xmm4,%xmm0
  movss  %xmm1,0x10(%rsp)
  call   <setPhasorPeriod@plt>
  test   %ebx,%ebx
  je     L154
  lea    -0x1(%rbx),%eax
  cmp    $0x2,%eax
  jbe    L495
  mov    %ebx,%ecx
  pxor   %xmm4,%xmm4
  movss  0x4(%rsp),%xmm3
  mov    %r15,%rax
  shr    $0x2,%ecx
  movss  %xmm4,0x24(%rsp)
  sub    $0x1,%ecx
  movss  %xmm4,0x18(%rsp)
  shufps $0x0,%xmm3,%xmm3
  shl    $0x4,%rcx
  lea    0x10(%r15,%rcx,1),%rcx
  cs nopw 0x0(%rax,%rax,1)
L77:
  movups (%rax),%xmm0
  movss  0x18(%rsp),%xmm1
  add    $0x10,%rax
  subps  %xmm3,%xmm0
  addss  %xmm0,%xmm1
  movaps %xmm0,%xmm2
  shufps $0x55,%xmm0,%xmm2
  addss  %xmm1,%xmm2
  movaps %xmm0,%xmm1
  unpckhps %xmm0,%xmm1
  shufps $0xff,%xmm0,%xmm0
  addss  %xmm2,%xmm1
  addss  %xmm0,%xmm1
  movss  %xmm1,0x18(%rsp)
  cmp    %rcx,%rax
  jne    L77
  mov    %ebx,%eax
  and    $0xfffffffc,%eax
  test   $0x3,%bl
  je     L82
L50:
  movslq %eax,%rcx
  movss  0x4(%rsp),%xmm6
  movss  0x18(%rsp),%xmm5
  movss  (%r15,%rcx,4),%xmm0
  lea    0x0(,%rcx,4),%rsi
  lea    0x1(%rax),%ecx
  subss  %xmm6,%xmm0
  addss  %xmm0,%xmm5
  movss  %xmm5,0x18(%rsp)
  cmp    %ecx,%ebx
  jle    L82
  movss  0x4(%r15,%rsi,1),%xmm0
  add    $0x2,%eax
  subss  %xmm6,%xmm0
  movaps %xmm0,%xmm7
  addss  %xmm5,%xmm7
  movss  %xmm7,0x18(%rsp)
  cmp    %eax,%ebx
  jle    L82
  movss  0x8(%r15,%rsi,1),%xmm0
  subss  %xmm6,%xmm0
  addss  %xmm7,%xmm0
  movss  %xmm0,0x18(%rsp)
L82:
  movss  D48(%rip),%xmm5
  xor    %r14d,%r14d
  pxor   %xmm1,%xmm1
  movss  %xmm5,0x8(%rsp)
  nopl   0x0(%rax)
L104:
  pxor   %xmm0,%xmm0
  movss  %xmm1,0x14(%rsp)
  cvtsi2ss %r14d,%xmm0
  addss  0x8(%rsp),%xmm0
  mulss  0x10(%rsp),%xmm0
  call   <cosf@plt>
  movss  0x14(%rsp),%xmm1
  movaps %xmm0,%xmm2
  movss  (%r15,%r14,4),%xmm0
  subss  0x4(%rsp),%xmm0
  add    $0x1,%r14
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  cmp    %rbx,%r14
  jne    L104
  divss  0x18(%rsp),%xmm1
  xor    %r14d,%r14d
  movss  %xmm1,0x2c(%rsp)
  pxor   %xmm1,%xmm1
  nopl   0x0(%rax)
L85:
  pxor   %xmm0,%xmm0
  movss  %xmm1,0x14(%rsp)
  cvtsi2ss %r14d,%xmm0
  addss  0x8(%rsp),%xmm0
  mulss  0x10(%rsp),%xmm0
  call   <sinf@plt>
  movss  0x14(%rsp),%xmm1
  movaps %xmm0,%xmm2
  movss  (%r15,%r14,4),%xmm0
  subss  0x4(%rsp),%xmm0
  add    $0x1,%r14
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  cmp    %rbx,%r14
  jne    L85
  divss  0x18(%rsp),%xmm1
L52:
  movss  0x2c(%rsp),%xmm3
  movaps %xmm1,%xmm0
  movss  0x1c(%rsp),%xmm2
  divss  0x10(%rsp),%xmm2
  mov    0x90(%rsp),%rax
  movss  0x24(%rsp),%xmm5
  divss  %xmm3,%xmm0
  movaps %xmm3,%xmm4
  mulss  %xmm3,%xmm4
  movaps %xmm4,%xmm3
  mulss  %xmm2,%xmm0
  movss  %xmm0,(%rax)
  movaps %xmm1,%xmm0
  mulss  %xmm1,%xmm0
  addss  %xmm0,%xmm3
  movss  D53(%rip),%xmm0
  divss  %xmm3,%xmm0
  subss  D53(%rip),%xmm0
  ucomiss %xmm0,%xmm5
  ja     L214
  sqrtss %xmm0,%xmm0
L60:
  mulss  %xmm0,%xmm2
  mov    0x98(%rsp),%rax
  movss  0x2c(%rsp),%xmm4
  movss  %xmm2,(%rax)
  mov    0x90(%rsp),%rax
  addss  (%rax),%xmm2
  mulss  0x8(%rsp),%xmm2
  mov    0xa0(%rsp),%rax
  movss  %xmm2,(%rax)
  mov    0x30(%rsp),%rax
  movss  %xmm4,(%rax)
  mov    0x38(%rsp),%rax
  movss  %xmm1,(%rax)
  test   %r12,%r12
  je     L390
  movslq 0x20(%rsp),%rbx
  xor    %esi,%esi
  mov    %r12,%rdi
  lea    0x0(,%rbx,4),%r14
  mov    %r14,%rdx
  call   <memset@plt>
  mov    0xb0(%rsp),%rdi
  xor    %esi,%esi
  mov    %r14,%rdx
  call   <memset@plt>
  cmp    %ebx,0x28(%rsp)
  jge    L371
  mov    0xa0(%rsp),%rax
  mov    0x28(%rsp),%ebx
  xor    %r14d,%r14d
  pxor   %xmm2,%xmm2
  sub    0x20(%rsp),%ebx
  movss  (%rax),%xmm1
  movss  %xmm1,0x8(%rsp)
  nop
L393:
  pxor   %xmm0,%xmm0
  movss  %xmm2,0x10(%rsp)
  cvtsi2ss %r14d,%xmm0
  mulss  0x1c(%rsp),%xmm0
  sub    $0x1,%r14d
  divss  0x8(%rsp),%xmm0
  call   <expf@plt>
  movss  0x10(%rsp),%xmm2
  addss  %xmm0,%xmm2
  cmp    %r14d,%ebx
  jne    L393
  movss  0x18(%rsp),%xmm7
  mov    0x40(%rsp),%r15
  xor    %r14d,%r14d
  movss  0x8(%rsp),%xmm1
  mov    %rbp,0x8(%rsp)
  divss  %xmm2,%xmm7
  add    %r12,%r15
  mov    %r15,%rbp
  mov    %r14d,%r15d
  mov    0xa0(%rsp),%r14
  movss  %xmm7,0x10(%rsp)
  jmp    L438
  nopl   0x0(%rax)
L217:
  movss  (%r14),%xmm1
L438:
  pxor   %xmm0,%xmm0
  add    $0x4,%rbp
  cvtsi2ss %r15d,%xmm0
  mulss  0x1c(%rsp),%xmm0
  sub    $0x1,%r15d
  divss  %xmm1,%xmm0
  call   <expf@plt>
  mulss  0x10(%rsp),%xmm0
  addss  0x4(%rsp),%xmm0
  movss  %xmm0,-0x4(%rbp)
  cmp    %ebx,%r15d
  jne    L217
  mov    0x8(%rsp),%rbp
L371:
  mov    0xb0(%rsp),%rax
  or     0xb8(%rsp),%rax
  je     L390
  mov    0x28(%rsp),%eax
  test   %eax,%eax
  jle    L221
  cmpq   $0x0,0xb0(%rsp)
  je     L213
  mov    0xb0(%rsp),%rax
  lea    0x4(%r12),%rdx
  mov    0x28(%rsp),%edi
  sub    %rdx,%rax
  cmp    $0x8,%rax
  seta   %dl
  cmp    $0x1,%edi
  setne  %al
  test   %al,%dl
  je     L5
  mov    0xb0(%rsp),%rax
  lea    0x4(%r13),%rdx
  sub    %rdx,%rax
  cmp    $0x8,%rax
  jbe    L5
  lea    -0x1(%rdi),%eax
  mov    %edi,%ecx
  cmp    $0x2,%eax
  jbe    L0
  shr    $0x2,%edi
  mov    0xb0(%rsp),%rcx
  xor    %eax,%eax
  mov    %edi,%edx
  shl    $0x4,%rdx
  nopl   0x0(%rax)
L155:
  movups 0x0(%r13,%rax,1),%xmm0
  movups (%r12,%rax,1),%xmm7
  subps  %xmm7,%xmm0
  movups %xmm0,(%rcx,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rdx
  jne    L155
  mov    0x28(%rsp),%esi
  mov    %esi,%edx
  and    $0xfffffffc,%edx
  mov    %edx,%eax
  cmp    %esi,%edx
  je     L310
  sub    %edx,%esi
  mov    %esi,%ecx
  cmp    $0x1,%esi
  je     L360
L350:
  movq   0x0(%r13,%rdx,4),%xmm0
  movq   (%r12,%rdx,4),%xmm1
  mov    0xb0(%rsp),%rdi
  subps  %xmm1,%xmm0
  movlps %xmm0,(%rdi,%rdx,4)
  mov    %ecx,%edx
  and    $0xfffffffe,%edx
  add    %edx,%eax
  cmp    %ecx,%edx
  je     L310
L360:
  cltq
  mov    0xb0(%rsp),%rsi
  movss  0x0(%r13,%rax,4),%xmm0
  subss  (%r12,%rax,4),%xmm0
  movss  %xmm0,(%rsi,%rax,4)
L310:
  mov    0x20(%rsp),%esi
  cmp    %esi,0x28(%rsp)
  jge    L126
L55:
  pxor   %xmm1,%xmm1
L381:
  movss  0x0(%r13,%rbp,4),%xmm0
  subss  (%r12,%rbp,4),%xmm0
  mov    0xb0(%rsp),%rax
  movss  %xmm0,(%rax,%rbp,4)
  movss  (%r12,%rbp,4),%xmm2
  comiss D53(%rip),%xmm2
  jbe    L135
  movss  D53(%rip),%xmm3
  mulss  %xmm0,%xmm0
  add    $0x1,%rbp
  divss  %xmm2,%xmm3
  mulss  %xmm3,%xmm0
  addss  %xmm0,%xmm1
  cmp    %ebp,0x20(%rsp)
  jg     L381
L303:
  cmpq   $0x0,0xb8(%rsp)
  je     L390
  mov    0xb8(%rsp),%rax
  movss  %xmm1,(%rax)
L390:
  xor    %eax,%eax
L342:
  add    $0x58,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L135:
  mulss  %xmm0,%xmm0
  add    $0x1,%rbp
  addss  %xmm0,%xmm1
  cmp    %ebp,0x20(%rsp)
  jg     L381
  jmp    L303
L213:
  mov    0x20(%rsp),%edi
  pxor   %xmm1,%xmm1
  cmp    %edi,0x28(%rsp)
  jge    L303
  xchg   %ax,%ax
L4:
  movss  (%r12,%rbp,4),%xmm2
  movss  0x0(%r13,%rbp,4),%xmm0
  comiss D53(%rip),%xmm2
  subss  %xmm2,%xmm0
  mulss  %xmm0,%xmm0
  jbe    L482
  movss  D53(%rip),%xmm3
  add    $0x1,%rbp
  divss  %xmm2,%xmm3
  mulss  %xmm3,%xmm0
  addss  %xmm0,%xmm1
  cmp    %ebp,0x20(%rsp)
  jg     L4
  jmp    L303
  nopl   0x0(%rax)
L482:
  addss  %xmm0,%xmm1
  add    $0x1,%rbp
  cmp    %ebp,0x20(%rsp)
  jg     L4
  jmp    L303
  nopl   0x0(%rax,%rax,1)
L154:
  pxor   %xmm4,%xmm4
  movss  D48(%rip),%xmm7
  movaps %xmm4,%xmm5
  movss  %xmm4,0x24(%rsp)
  divss  %xmm4,%xmm5
  movss  %xmm4,0x18(%rsp)
  movss  %xmm7,0x8(%rsp)
  movss  %xmm5,0x2c(%rsp)
  movaps %xmm5,%xmm1
  jmp    L52
L495:
  pxor   %xmm6,%xmm6
  xor    %eax,%eax
  movss  %xmm6,0x24(%rsp)
  movss  %xmm6,0x18(%rsp)
  jmp    L50
L5:
  mov    0xb0(%rsp),%rdx
  mov    0x48(%rsp),%rcx
  xor    %eax,%eax
  nopl   0x0(%rax)
L394:
  movss  0x0(%r13,%rax,4),%xmm0
  subss  (%r12,%rax,4),%xmm0
  movss  %xmm0,(%rdx,%rax,4)
  add    $0x1,%rax
  cmp    %rax,%rcx
  jne    L394
  jmp    L310
L221:
  mov    0x20(%rsp),%esi
  cmp    %esi,0x28(%rsp)
  jge    L126
  cmpq   $0x0,0xb0(%rsp)
  jne    L55
  pxor   %xmm1,%xmm1
  jmp    L4
L126:
  pxor   %xmm1,%xmm1
  jmp    L303
L0:
  xor    %eax,%eax
  xor    %edx,%edx
  jmp    L350
L429:
  mov    $0xfffffffe,%eax
  jmp    L342
L493:
  mov    $0xffffffff,%eax
  jmp    L342
L214:
  movss  %xmm1,0x14(%rsp)
  movss  %xmm2,0x10(%rsp)
  call   <sqrtf@plt>
  movss  0x14(%rsp),%xmm1
  movss  0x10(%rsp),%xmm2
  jmp    L60
```

tool_calls: name: parse_data
arguments: tag: D3
data_type: byte[4]
name: parse_data
arguments: tag: D48
data_type: byte[4]
name: parse_data
arguments: tag: D53
data_type: byte[4]

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

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

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

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