user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<amoeba>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x88,%rsp
  mov    %rdi,-0x68(%rbp)
  mov    %rsi,-0x70(%rbp)
  movsd  %xmm0,-0x78(%rbp)
  mov    %rdx,-0x80(%rbp)
  mov    %rcx,-0x88(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  mov    -0x88(%rbp),%rax
  movl   $0x0,(%rax)
  mov    -0x68(%rbp),%rax
  movsd  (%rax),%xmm1
  mov    -0x68(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  addsd  %xmm0,%xmm1
  mov    -0x68(%rbp),%rax
  add    $0x20,%rax
  movsd  (%rax),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  mov    -0x68(%rbp),%rax
  movsd  0x8(%rax),%xmm1
  mov    -0x68(%rbp),%rax
  add    $0x10,%rax
  movsd  0x8(%rax),%xmm0
  addsd  %xmm0,%xmm1
  mov    -0x68(%rbp),%rax
  add    $0x20,%rax
  movsd  0x8(%rax),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
L47:
  movl   $0x0,-0x58(%rbp)
  mov    -0x70(%rbp),%rax
  movsd  (%rax),%xmm0
  mov    -0x70(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  comisd %xmm1,%xmm0
  jbe    L75
  movl   $0x1,-0x54(%rbp)
  mov    $0x0,%eax
  jmp    L53
L75:
  movl   $0x0,-0x54(%rbp)
  mov    $0x1,%eax
L53:
  mov    %eax,-0x5c(%rbp)
  movl   $0x0,-0x60(%rbp)
  jmp    L188
L31:
  mov    -0x60(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x58(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  comisd %xmm1,%xmm0
  jb     L127
  mov    -0x60(%rbp),%eax
  mov    %eax,-0x58(%rbp)
L127:
  mov    -0x60(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x5c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  comisd %xmm1,%xmm0
  jbe    L97
  mov    -0x5c(%rbp),%eax
  mov    %eax,-0x54(%rbp)
  mov    -0x60(%rbp),%eax
  mov    %eax,-0x5c(%rbp)
  jmp    L17
L97:
  mov    -0x60(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  comisd %xmm1,%xmm0
  jbe    L17
  mov    -0x60(%rbp),%eax
  cmp    -0x5c(%rbp),%eax
  je     L17
  mov    -0x60(%rbp),%eax
  mov    %eax,-0x54(%rbp)
L17:
  addl   $0x1,-0x60(%rbp)
L188:
  cmpl   $0x2,-0x60(%rbp)
  jle    L31
  mov    -0x5c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x58(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movq   D66(%rip),%xmm1
  andpd  %xmm1,%xmm0
  addsd  %xmm0,%xmm0
  mov    -0x5c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movq   D66(%rip),%xmm2
  andpd  %xmm1,%xmm2
  mov    -0x58(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movq   D66(%rip),%xmm3
  andpd  %xmm3,%xmm1
  addsd  %xmm1,%xmm2
  movsd  D18(%rip),%xmm1
  addsd  %xmm2,%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  -0x78(%rbp),%xmm0
  comisd -0x50(%rbp),%xmm0
  jbe    L202
  mov    -0x70(%rbp),%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  mov    -0x58(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x70(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    -0x58(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x68(%rbp),%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  mov    -0x58(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x68(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    -0x58(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x68(%rbp),%rax
  movsd  0x8(%rax),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  mov    -0x58(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movsd  0x8(%rax),%xmm0
  mov    -0x68(%rbp),%rax
  movsd  %xmm0,0x8(%rax)
  mov    -0x58(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,0x8(%rax)
  jmp    L192
L202:
  mov    -0x88(%rbp),%rax
  mov    (%rax),%eax
  cmp    $0x1387,%eax
  jg     L124
  mov    -0x88(%rbp),%rax
  mov    (%rax),%eax
  lea    0x2(%rax),%edx
  mov    -0x88(%rbp),%rax
  mov    %edx,(%rax)
  mov    D49(%rip),%rdi
  mov    -0x5c(%rbp),%r8d
  mov    -0x80(%rbp),%rcx
  lea    -0x30(%rbp),%rdx
  mov    -0x70(%rbp),%rsi
  mov    -0x68(%rbp),%rax
  movq   %rdi,%xmm0
  mov    %rax,%rdi
  call   <amotry@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x48(%rbp)
  mov    -0x58(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  comisd -0x48(%rbp),%xmm0
  jb     L161
  mov    D41(%rip),%rdi
  mov    -0x5c(%rbp),%r8d
  mov    -0x80(%rbp),%rcx
  lea    -0x30(%rbp),%rdx
  mov    -0x70(%rbp),%rsi
  mov    -0x68(%rbp),%rax
  movq   %rdi,%xmm0
  mov    %rax,%rdi
  call   <amotry@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x48(%rbp)
  jmp    L47
L161:
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movsd  -0x48(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jb     L18
  mov    -0x5c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  mov    D35(%rip),%rdi
  mov    -0x5c(%rbp),%r8d
  mov    -0x80(%rbp),%rcx
  lea    -0x30(%rbp),%rdx
  mov    -0x70(%rbp),%rsi
  mov    -0x68(%rbp),%rax
  movq   %rdi,%xmm0
  mov    %rax,%rdi
  call   <amotry@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x48(%rbp)
  movsd  -0x48(%rbp),%xmm0
  comisd -0x40(%rbp),%xmm0
  jb     L108
  movl   $0x0,-0x60(%rbp)
  jmp    L214
L90:
  mov    -0x60(%rbp),%eax
  cmp    -0x58(%rbp),%eax
  je     L94
  mov    -0x60(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x58(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  addsd  %xmm0,%xmm1
  movsd  D35(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  mov    -0x60(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x60(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movsd  0x8(%rax),%xmm1
  mov    -0x58(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movsd  0x8(%rax),%xmm0
  addsd  %xmm0,%xmm1
  movsd  D35(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0x60(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,0x8(%rax)
  mov    -0x60(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x70(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  lea    -0x30(%rbp),%rax
  mov    -0x80(%rbp),%rdx
  mov    %rax,%rdi
  call   *%rdx
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
L94:
  addl   $0x1,-0x60(%rbp)
L214:
  cmpl   $0x2,-0x60(%rbp)
  jle    L90
  mov    -0x88(%rbp),%rax
  mov    (%rax),%eax
  lea    0x2(%rax),%edx
  mov    -0x88(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x68(%rbp),%rax
  movsd  (%rax),%xmm1
  mov    -0x68(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  addsd  %xmm0,%xmm1
  mov    -0x68(%rbp),%rax
  add    $0x20,%rax
  movsd  (%rax),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  mov    -0x68(%rbp),%rax
  movsd  0x8(%rax),%xmm1
  mov    -0x68(%rbp),%rax
  add    $0x10,%rax
  movsd  0x8(%rax),%xmm0
  addsd  %xmm0,%xmm1
  mov    -0x68(%rbp),%rax
  add    $0x20,%rax
  movsd  0x8(%rax),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  jmp    L47
L18:
  mov    -0x88(%rbp),%rax
  mov    (%rax),%eax
  lea    -0x1(%rax),%edx
  mov    -0x88(%rbp),%rax
  mov    %edx,(%rax)
L108:
  jmp    L47
L124:
  nop
L192:
  mov    -0x18(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L16
  call   <__stack_chk_fail@plt>
L16:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: unpack_data
arguments: label: D66
type: qword
name: unpack_data
arguments: label: D18
type: byte[8]
name: unpack_data
arguments: label: D49
type: byte[8]
name: unpack_data
arguments: label: D41
type: f64
name: unpack_data
arguments: label: D35
type: f64

tool: D66: 9223372036854775807

tool: {"D18": [0x16,0x56,0xe7,0x9e,0xaf,0x03,0xd2,0x3c]}

tool: {"D49": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xbf]}

tool: D41: 2

tool: D35: 0.5

assistant: ```c
void amoeba(double p[3][2], double *y, double ftol, double (*funk)(double[]), int *nfunk) {
  int ii, ihi, ilo, inhi;
  double rtol, ysave, ytry, psum[2], tempzz;
  *nfunk = 0;
  psum[0] = p[0][0] + p[1][0] + p[2][0];
  psum[1] = p[0][1] + p[1][1] + p[2][1];
  for (;;) {
    ilo = 0;
    ihi = y[0] > y[1] ? (inhi = 1, 0) : (inhi = 0, 1);
    for (ii = 0; ii <= 2; ii++) {
      if (y[ii] <= y[ilo])
        ilo = ii;
      if (y[ii] > y[ihi]) {
        inhi = ihi;
        ihi = ii;
      } else if (y[ii] > y[inhi] && ii != ihi)
        inhi = ii;
    }
    rtol = 2.0 * fabs(y[ihi] - y[ilo]) / (fabs(y[ihi]) + fabs(y[ilo]) + 1.0e-15);
    if (rtol < ftol) {
      tempzz = (y[0]);
      (y[0]) = (y[ilo]);
      (y[ilo]) = tempzz;
      tempzz = (p[0][0]);
      (p[0][0]) = (p[ilo][0]);
      (p[ilo][0]) = tempzz;
      tempzz = (p[0][1]);
      (p[0][1]) = (p[ilo][1]);
      (p[ilo][1]) = tempzz;
      break;
    }
    if (*nfunk >= 5000) {
      return;
    }
    *nfunk += 2;
    ytry = amotry(p, y, psum, funk, ihi, -1.0);
    if (ytry <= y[ilo])
      ytry = amotry(p, y, psum, funk, ihi, 2.0);
    else if (ytry >= y[inhi]) {
      ysave = y[ihi];
      ytry = amotry(p, y, psum, funk, ihi, 0.5);
      if (ytry >= ysave) {
        for (ii = 0; ii <= 2; ii++) {
          if (ii != ilo) {
            p[ii][0] = psum[0] = 0.5 * (p[ii][0] + p[ilo][0]);
            p[ii][1] = psum[1] = 0.5 * (p[ii][1] + p[ilo][1]);
            y[ii] = (*funk)(psum);
          }
        }
        *nfunk += 2;
        psum[0] = p[0][0] + p[1][0] + p[2][0];
        psum[1] = p[0][1] + p[1][1] + p[2][1];
      }
    } else
      --(*nfunk);
  }
}
```