user: 这段汇编代码用C语言表示是什么样的：

```asm
<fast_expansion_sum_zeroelim>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x8,%rsp
  mov    %edi,-0x64(%rbp)
  mov    %rsi,-0x70(%rbp)
  mov    %edx,-0x68(%rbp)
  mov    %rcx,-0x78(%rbp)
  mov    %r8,-0x80(%rbp)
  mov    -0x70(%rbp),%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  mov    -0x78(%rbp),%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movl   $0x0,-0x50(%rbp)
  mov    -0x50(%rbp),%eax
  mov    %eax,-0x54(%rbp)
  movsd  -0x28(%rbp),%xmm0
  comisd -0x30(%rbp),%xmm0
  seta   %al
  xor    $0x1,%eax
  mov    %eax,%edx
  movsd  -0x30(%rbp),%xmm0
  movq   D2(%rip),%xmm1
  xorpd  %xmm0,%xmm1
  movsd  -0x28(%rbp),%xmm0
  comisd %xmm1,%xmm0
  seta   %al
  xor    %edx,%eax
  test   %al,%al
  je     L34
  movsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  addl   $0x1,-0x54(%rbp)
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  jmp    L148
L34:
  movsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  addl   $0x1,-0x50(%rbp)
  mov    -0x50(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x28(%rbp)
L148:
  movl   $0x0,-0x4c(%rbp)
  mov    -0x54(%rbp),%eax
  cmp    -0x64(%rbp),%eax
  jge    L254
  mov    -0x50(%rbp),%eax
  cmp    -0x68(%rbp),%eax
  jge    L254
  movsd  -0x28(%rbp),%xmm0
  comisd -0x30(%rbp),%xmm0
  seta   %al
  xor    $0x1,%eax
  mov    %eax,%edx
  movsd  -0x30(%rbp),%xmm0
  movq   D2(%rip),%xmm1
  xorpd  %xmm0,%xmm1
  movsd  -0x28(%rbp),%xmm0
  comisd %xmm1,%xmm0
  seta   %al
  xor    %edx,%eax
  test   %al,%al
  je     L28
  movsd  -0x30(%rbp),%xmm0
  addsd  -0x48(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x40(%rbp),%xmm0
  subsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x48(%rbp),%xmm0
  subsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  addl   $0x1,-0x54(%rbp)
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  jmp    L72
L28:
  movsd  -0x28(%rbp),%xmm0
  addsd  -0x48(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x40(%rbp),%xmm0
  subsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x48(%rbp),%xmm0
  subsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  addl   $0x1,-0x50(%rbp)
  mov    -0x50(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x28(%rbp)
L72:
  movsd  -0x40(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  pxor   %xmm0,%xmm0
  ucomisd -0x38(%rbp),%xmm0
  jp     L46
  pxor   %xmm0,%xmm0
  ucomisd -0x38(%rbp),%xmm0
  je     L7
L46:
  mov    -0x4c(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x4c(%rbp)
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  jmp    L7
L137:
  movsd  -0x28(%rbp),%xmm0
  comisd -0x30(%rbp),%xmm0
  seta   %al
  xor    $0x1,%eax
  mov    %eax,%edx
  movsd  -0x30(%rbp),%xmm0
  movq   D2(%rip),%xmm1
  xorpd  %xmm0,%xmm1
  movsd  -0x28(%rbp),%xmm0
  comisd %xmm1,%xmm0
  seta   %al
  xor    %edx,%eax
  test   %al,%al
  je     L215
  movsd  -0x48(%rbp),%xmm0
  addsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x40(%rbp),%xmm0
  subsd  -0x48(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x40(%rbp),%xmm0
  subsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x30(%rbp),%xmm0
  subsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x48(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  addsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  addl   $0x1,-0x54(%rbp)
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  jmp    L38
L215:
  movsd  -0x48(%rbp),%xmm0
  addsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x40(%rbp),%xmm0
  subsd  -0x48(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x40(%rbp),%xmm0
  subsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x28(%rbp),%xmm0
  subsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x48(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  addsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  addl   $0x1,-0x50(%rbp)
  mov    -0x50(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x28(%rbp)
L38:
  movsd  -0x40(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  pxor   %xmm0,%xmm0
  ucomisd -0x38(%rbp),%xmm0
  jp     L153
  pxor   %xmm0,%xmm0
  ucomisd -0x38(%rbp),%xmm0
  je     L7
L153:
  mov    -0x4c(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x4c(%rbp)
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,(%rax)
L7:
  mov    -0x54(%rbp),%eax
  cmp    -0x64(%rbp),%eax
  jge    L254
  mov    -0x50(%rbp),%eax
  cmp    -0x68(%rbp),%eax
  jl     L137
  jmp    L254
L94:
  movsd  -0x48(%rbp),%xmm0
  addsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x40(%rbp),%xmm0
  subsd  -0x48(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x40(%rbp),%xmm0
  subsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x30(%rbp),%xmm0
  subsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x48(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  addsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  addl   $0x1,-0x54(%rbp)
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x40(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  pxor   %xmm0,%xmm0
  ucomisd -0x38(%rbp),%xmm0
  jp     L170
  pxor   %xmm0,%xmm0
  ucomisd -0x38(%rbp),%xmm0
  je     L254
L170:
  mov    -0x4c(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x4c(%rbp)
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,(%rax)
L254:
  mov    -0x54(%rbp),%eax
  cmp    -0x64(%rbp),%eax
  jl     L94
  jmp    L135
L152:
  movsd  -0x48(%rbp),%xmm0
  addsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x40(%rbp),%xmm0
  subsd  -0x48(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x40(%rbp),%xmm0
  subsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x28(%rbp),%xmm0
  subsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x48(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  addsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  addl   $0x1,-0x50(%rbp)
  mov    -0x50(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x40(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  pxor   %xmm0,%xmm0
  ucomisd -0x38(%rbp),%xmm0
  jp     L67
  pxor   %xmm0,%xmm0
  ucomisd -0x38(%rbp),%xmm0
  je     L135
L67:
  mov    -0x4c(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x4c(%rbp)
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,(%rax)
L135:
  mov    -0x50(%rbp),%eax
  cmp    -0x68(%rbp),%eax
  jl     L152
  pxor   %xmm0,%xmm0
  ucomisd -0x48(%rbp),%xmm0
  jp     L189
  pxor   %xmm0,%xmm0
  ucomisd -0x48(%rbp),%xmm0
  jne    L189
  cmpl   $0x0,-0x4c(%rbp)
  jne    L176
L189:
  mov    -0x4c(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x4c(%rbp)
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x48(%rbp),%xmm0
  movsd  %xmm0,(%rax)
L176:
  mov    -0x4c(%rbp),%eax
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_label: D2
data_type: f32[2]

tool: {"D2": [0.0,-0.0]}

assistant: ```c
int fast_expansion_sum_zeroelim(int elen, double *e, int flen, double *f, double *h) {
  double Q;
  double Qnew;
  double hh;
  double bvirt;
  double avirt, bround, around;
  int eindex, findex, hindex;
  double enow, fnow;
  enow = e[0];
  fnow = f[0];
  eindex = findex = 0;
  if ((fnow > enow) == (fnow > -enow)) {
    Q = enow;
    enow = e[++eindex];
  } else {
    Q = fnow;
    fnow = f[++findex];
  }
  hindex = 0;
  if ((eindex < elen) && (findex < flen)) {
    if ((fnow > enow) == (fnow > -enow)) {
      Qnew = (double)(enow + Q);
      bvirt = Qnew - enow;
      hh = Q - bvirt;
      enow = e[++eindex];
    } else {
      Qnew = (double)(fnow + Q);
      bvirt = Qnew - fnow;
      hh = Q - bvirt;
      fnow = f[++findex];
    }
    Q = Qnew;
    if (hh != 0.0) {
      h[hindex++] = hh;
    }
    while ((eindex < elen) && (findex < flen)) {
      if ((fnow > enow) == (fnow > -enow)) {
        Qnew = (double)(Q + enow);
        bvirt = (double)(Qnew - Q);
        avirt = Qnew - bvirt;
        bround = enow - bvirt;
        around = Q - avirt;
        hh = around + bround;
        enow = e[++eindex];
      } else {
        Qnew = (double)(Q + fnow);
        bvirt = (double)(Qnew - Q);
        avirt = Qnew - bvirt;
        bround = fnow - bvirt;
        around = Q - avirt;
        hh = around + bround;
        fnow = f[++findex];
      }
      Q = Qnew;
      if (hh != 0.0) {
        h[hindex++] = hh;
      }
    }
  }
  while (eindex < elen) {
    Qnew = (double)(Q + enow);
    bvirt = (double)(Qnew - Q);
    avirt = Qnew - bvirt;
    bround = enow - bvirt;
    around = Q - avirt;
    hh = around + bround;
    enow = e[++eindex];
    Q = Qnew;
    if (hh != 0.0) {
      h[hindex++] = hh;
    }
  }
  while (findex < flen) {
    Qnew = (double)(Q + fnow);
    bvirt = (double)(Qnew - Q);
    avirt = Qnew - bvirt;
    bround = fnow - bvirt;
    around = Q - avirt;
    hh = around + bround;
    fnow = f[++findex];
    Q = Qnew;
    if (hh != 0.0) {
      h[hindex++] = hh;
    }
  }
  if ((Q != 0.0) || (hindex == 0)) {
    h[hindex++] = Q;
  }
  return hindex;
}
```