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

```asm
<interpolateCIP>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  movsd  %xmm0,-0x18(%rbp)
  mov    %rdi,-0x20(%rbp)
  movsd  %xmm1,-0x28(%rbp)
  mov    %esi,-0x2c(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  -0x18(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jbe    L49
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  lea    -0x28(%rax),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  comisd -0x18(%rbp),%xmm0
  jbe    L49
  movl   $0x0,-0xc(%rbp)
  jmp    L34
L57:
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movsd  -0x18(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jb     L14
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  comisd -0x18(%rbp),%xmm0
  jbe    L14
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movsd  -0x18(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  divsd  -0x28(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <f_up@plt>
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  0x8(%rax),%xmm2
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm4
  movsd  -0x18(%rbp),%xmm1
  movapd %xmm1,%xmm3
  subsd  %xmm4,%xmm3
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  0x10(%rax),%xmm4
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm6
  movsd  -0x18(%rbp),%xmm1
  movapd %xmm1,%xmm5
  subsd  %xmm6,%xmm5
  movsd  D12(%rip),%xmm1
  mulsd  %xmm1,%xmm5
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  0x18(%rax),%xmm6
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm8
  movsd  -0x18(%rbp),%xmm1
  movapd %xmm1,%xmm7
  subsd  %xmm8,%xmm7
  movsd  D27(%rip),%xmm1
  mulsd  %xmm1,%xmm7
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  0x20(%rax),%xmm1
  mulsd  %xmm7,%xmm1
  addsd  %xmm6,%xmm1
  mulsd  %xmm5,%xmm1
  addsd  %xmm4,%xmm1
  mulsd  %xmm3,%xmm1
  addsd  %xmm2,%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
L14:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movsd  -0x18(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  divsd  -0x28(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <f_up@plt>
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  0x8(%rax),%xmm2
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm4
  movsd  -0x18(%rbp),%xmm1
  movapd %xmm1,%xmm3
  subsd  %xmm4,%xmm3
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  0x10(%rax),%xmm4
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm6
  movsd  -0x18(%rbp),%xmm1
  movapd %xmm1,%xmm5
  subsd  %xmm6,%xmm5
  movsd  D12(%rip),%xmm1
  mulsd  %xmm1,%xmm5
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  0x18(%rax),%xmm6
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm8
  movsd  -0x18(%rbp),%xmm1
  movapd %xmm1,%xmm7
  subsd  %xmm8,%xmm7
  movsd  D27(%rip),%xmm1
  mulsd  %xmm1,%xmm7
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  0x20(%rax),%xmm1
  mulsd  %xmm7,%xmm1
  addsd  %xmm6,%xmm1
  mulsd  %xmm5,%xmm1
  addsd  %xmm4,%xmm1
  mulsd  %xmm3,%xmm1
  addsd  %xmm2,%xmm1
  mulsd  %xmm1,%xmm0
  movsd  -0x8(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  addl   $0x1,-0xc(%rbp)
L34:
  mov    -0x2c(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0xc(%rbp)
  jl     L57
L49:
  movsd  -0x8(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: parse_data
arguments: label: D12
type: f64
name: parse_data
arguments: label: D27
type: f64

tool: D12: 0.5

tool: D27: 0.3333333333333333

assistant: ```c
double interpolateCIP(double X, double Values[][5], double step, int N) {
  int i;
  double toRet = 0.0;
  if (X > Values[0][0] && X < Values[N - 1][0])
    for (i = 0; i < N - 1; i++) {
      if (Values[i][0] <= X && Values[i + 1][0] > X)
        toRet = f_up((X - Values[i][0]) / step) * (Values[i][1] + (X - Values[i][0]) * (Values[i][2] + 0.5 * (X - Values[i][0]) * (Values[i][3] + 0.333333333333333333 * (X - Values[i][0]) * Values[i][4])));
      toRet += f_up((X - Values[i + 1][0]) / step) * (Values[i + 1][1] + (X - Values[i + 1][0]) * (Values[i + 1][2] + 0.5 * (X - Values[i + 1][0]) * (Values[i + 1][3] + 0.333333333333333333 * (X - Values[i + 1][0]) * Values[i + 1][4])));
    }
  return toRet;
}
```