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

```asm
<create_spline>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%r14
  mov    %esi,%ebx
  mov    %rdx,%r13
  lea    0x1(%rsi),%ebp
  imul   %esi,%ebp
  mov    $0x8,%esi
  mov    %ebp,%edi
  call   <calloc@plt>
  mov    %rax,%r12
  mov    D37(%rip),%rax
  mov    %rax,(%r12)
  lea    -0x1(%rbx),%r8d
  cmp    $0x1,%r8d
  jle    L0
  mov    %r14,%rax
  movslq %ebx,%rsi
  lea    0x8(,%rsi,8),%rdi
  lea    0x8(%r12),%rdx
  mov    %ebx,%ecx
  imul   %ebx,%ecx
  movslq %ecx,%rcx
  lea    0x8(%r12,%rcx,8),%rcx
  lea    -0x3(%rbx),%r9d
  shl    $0x4,%r9
  lea    0x10(%r14,%r9,1),%r9
  shl    $0x3,%rsi
  movsd  D9(%rip),%xmm9
  movsd  D30(%rip),%xmm7
L12:
  movsd  0x10(%rax),%xmm0
  movsd  (%rax),%xmm5
  movapd %xmm0,%xmm3
  subsd  %xmm5,%xmm3
  movsd  0x20(%rax),%xmm2
  movapd %xmm2,%xmm4
  subsd  %xmm0,%xmm4
  movsd  0x8(%rax),%xmm8
  movsd  0x18(%rax),%xmm1
  movsd  0x28(%rax),%xmm0
  movapd %xmm3,%xmm6
  addsd  %xmm4,%xmm6
  movapd %xmm3,%xmm10
  divsd  %xmm6,%xmm10
  movsd  %xmm10,(%rdx)
  lea    (%rdx,%rsi,1),%r10
  movsd  %xmm9,(%r10)
  movapd %xmm4,%xmm10
  divsd  %xmm6,%xmm10
  movsd  %xmm10,(%rsi,%r10,1)
  subsd  %xmm1,%xmm0
  divsd  %xmm4,%xmm0
  subsd  %xmm8,%xmm1
  divsd  %xmm3,%xmm1
  subsd  %xmm1,%xmm0
  mulsd  %xmm7,%xmm0
  subsd  %xmm5,%xmm2
  divsd  %xmm2,%xmm0
  movsd  %xmm0,(%rcx)
  add    $0x10,%rax
  add    %rdi,%rdx
  add    $0x8,%rcx
  cmp    %r9,%rax
  jne    L12
L0:
  lea    (%rbx,%rbx,1),%eax
  sub    %eax,%ebp
  add    %r8d,%ebp
  movslq %ebp,%rbp
  mov    D37(%rip),%rax
  mov    %rax,(%r12,%rbp,8)
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <NUM_print_matrix@plt>
  mov    %ebx,%edx
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <NUM_lu@plt>
  mov    %ebx,%esi
  mov    %r13,%rdi
  call   <NUM_print_vec@plt>
  mov    %r12,%rdi
  call   <free@plt>
  mov    $0x0,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D37
data_type: byte[8]
name: extract_symbolic_data
arguments: data_tag: D9
data_type: byte[8]
name: extract_symbolic_data
arguments: data_tag: D30
data_type: byte[8]

tool: {"D37": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

tool: {"D9": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40]}

tool: {"D30": [0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x40]}

assistant: ```c
int create_spline(double *data, int n_point, double *spline) {
  int i;
  int col;
  double hi0, hi1, hi2;
  double fi0, fi1, fi2;
  double *matrix;
  col = 2;
  matrix = (double *)calloc(n_point * (n_point + 1), sizeof(double));
  matrix[0 + 0] = 1;
  for (i = 1; i < n_point - 1; i++) {
    hi0 = data[0 + (i + 0) * col] - data[0 + (i - 1) * col];
    hi1 = data[0 + (i + 1) * col] - data[0 + (i - 0) * col];
    hi2 = data[0 + (i + 1) * col] - data[0 + (i - 1) * col];
    fi0 = data[1 + (i - 1) * col];
    fi1 = data[1 + (i - 0) * col];
    fi2 = data[1 + (i + 1) * col];
    matrix[i + (i - 1) * n_point] = hi0 / (hi0 + hi1);
    matrix[i + (i - 0) * n_point] = 2;
    matrix[i + (i + 1) * n_point] = hi1 / (hi0 + hi1);
    matrix[i + n_point * n_point] = 6 * ((fi2 - fi1) / hi1 - (fi1 - fi0) / hi0) / hi2;
  }
  matrix[n_point - 1 + (n_point - 1) * n_point] = 1;
  NUM_print_matrix(matrix, n_point);
  NUM_lu(matrix, spline, n_point);
  NUM_print_vec(spline, n_point);
  free(matrix);
  return 0;
}
```