user: 请将以下的汇编代码转换成C语言代码：

```asm
<cuberp>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xd0,%rsp
  movsd  %xmm0,-0xc8(%rbp)
  mov    %rdi,-0xd0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movsd  D33(%rip),%xmm0
  movsd  %xmm0,-0x90(%rbp)
  movsd  D24(%rip),%xmm0
  movsd  %xmm0,-0x88(%rbp)
  movsd  D6(%rip),%xmm0
  movsd  %xmm0,-0x80(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  D24(%rip),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  D60(%rip),%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  D58(%rip),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  D61(%rip),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movsd  D58(%rip),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  D24(%rip),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  D64(%rip),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  D61(%rip),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  D33(%rip),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0xb0(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0xa8(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0xa0(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x98(%rbp)
  movl   $0x0,-0xb8(%rbp)
  jmp    L48
L39:
  movl   $0x0,-0xb4(%rbp)
  jmp    L45
L31:
  mov    -0xb8(%rbp),%eax
  cltq
  movsd  -0xb0(%rbp,%rax,8),%xmm1
  mov    -0xb8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm2
  mov    -0xb8(%rbp),%eax
  movslq %eax,%rdx
  mov    -0xb4(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movsd  -0x90(%rbp,%rax,8),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  mov    -0xb8(%rbp),%eax
  cltq
  movsd  %xmm0,-0xb0(%rbp,%rax,8)
  addl   $0x1,-0xb4(%rbp)
L45:
  cmpl   $0x3,-0xb4(%rbp)
  jle    L31
  addl   $0x1,-0xb8(%rbp)
L48:
  cmpl   $0x3,-0xb8(%rbp)
  jle    L39
  movsd  -0x98(%rbp),%xmm1
  movsd  -0xa0(%rbp),%xmm2
  movsd  -0xa8(%rbp),%xmm3
  movsd  -0xb0(%rbp),%xmm0
  mulsd  -0xc8(%rbp),%xmm0
  addsd  %xmm3,%xmm0
  mulsd  -0xc8(%rbp),%xmm0
  addsd  %xmm2,%xmm0
  mulsd  -0xc8(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L11
  call   <__stack_chk_fail@plt>
L11:
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: read_data
arguments: data_tag: D33
type_guessed: f32[2]
name: read_data
arguments: data_tag: D24
type_guessed: f64
name: read_data
arguments: data_tag: D6
type_guessed: f32[2]
name: read_data
arguments: data_tag: D60
type_guessed: f32[2]
name: read_data
arguments: data_tag: D58
type_guessed: f32[2]
name: read_data
arguments: data_tag: D61
type_guessed: f64
name: read_data
arguments: data_tag: D64
type_guessed: f64

tool: {"D33": [0.0,-1.875]}

tool: D24: 3

tool: {"D6": [0.0,-2.0]}

tool: {"D60": [0.0,-2.375]}

tool: {"D58": [0.0,-2.125]}

tool: D61: 1

tool: D64: 6

assistant: ```c
double cuberp(double x, double *f) {
  double M[4][4] = {{-1.0, 3.0, -2.0, 0.0}, {3.0, -6.0, -3.0, 1.0}, {-3.0, 3.0, 6.0, 0.0}, {1.0, 0.0, -1.0, 0.0}};
  double coeff[4] = {0.0, 0.0, 0.0, 0.0};
  int i, j;
  for (i = 0; i < 4; i++) {
    for (j = 0; j < 4; j++) {
      coeff[i] += f[i] * M[j][i];
    }
  }
  return coeff[3] + x * (coeff[2] + x * (coeff[1] + x * coeff[0]));
}
```