user: Please show me the C implementation that matches the assembly code listed below:

```asm
<TetQuadLag>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    %rdx,-0x48(%rbp)
  mov    -0x38(%rbp),%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0x38(%rbp),%rax
  movsd  0x8(%rax),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  mov    -0x38(%rbp),%rax
  movsd  0x10(%rax),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  D255(%rip),%xmm0
  subsd  -0x28(%rbp),%xmm0
  subsd  -0x20(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x28(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  movsd  D255(%rip),%xmm1
  subsd  %xmm1,%xmm0
  mulsd  -0x28(%rbp),%xmm0
  mov    -0x40(%rbp),%rax
  movsd  %xmm0,(%rax)
  movsd  -0x20(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  movsd  D255(%rip),%xmm1
  subsd  %xmm1,%xmm0
  mov    -0x40(%rbp),%rax
  add    $0x8,%rax
  mulsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x18(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  movsd  D255(%rip),%xmm1
  subsd  %xmm1,%xmm0
  mov    -0x40(%rbp),%rax
  add    $0x10,%rax
  mulsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x28(%rbp),%xmm0
  movapd %xmm0,%xmm2
  addsd  %xmm0,%xmm2
  movsd  D255(%rip),%xmm0
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  -0x20(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  subsd  %xmm0,%xmm1
  movsd  -0x18(%rbp),%xmm0
  movapd %xmm0,%xmm2
  addsd  %xmm0,%xmm2
  subsd  %xmm2,%xmm1
  movapd %xmm1,%xmm0
  mov    -0x40(%rbp),%rax
  add    $0x18,%rax
  mulsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x28(%rbp),%xmm1
  movsd  D357(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x40(%rbp),%rax
  add    $0x20,%rax
  mulsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x20(%rbp),%xmm1
  movsd  D357(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x40(%rbp),%rax
  add    $0x28,%rax
  mulsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x18(%rbp),%xmm1
  movsd  D357(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x40(%rbp),%rax
  add    $0x30,%rax
  mulsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x28(%rbp),%xmm1
  movsd  D357(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x40(%rbp),%rax
  add    $0x38,%rax
  mulsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x20(%rbp),%xmm1
  movsd  D357(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x40(%rbp),%rax
  add    $0x40,%rax
  mulsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x18(%rbp),%xmm1
  movsd  D357(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x40(%rbp),%rax
  add    $0x48,%rax
  mulsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x28(%rbp),%xmm1
  movsd  D357(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D115(%rip),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  -0x20(%rbp),%xmm2
  movsd  D357(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0x18(%rbp),%xmm2
  movsd  D357(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x28(%rbp),%xmm1
  movsd  D357(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D255(%rip),%xmm1
  subsd  %xmm1,%xmm0
  mov    -0x48(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    -0x48(%rbp),%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,0x8(%rax)
  mov    -0x48(%rbp),%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,0x10(%rax)
  mov    -0x48(%rbp),%rax
  add    $0x18,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x20(%rbp),%xmm1
  movsd  D357(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x48(%rbp),%rax
  add    $0x18,%rax
  movsd  D255(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,0x8(%rax)
  mov    -0x48(%rbp),%rax
  add    $0x18,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,0x10(%rax)
  mov    -0x48(%rbp),%rax
  add    $0x30,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x48(%rbp),%rax
  add    $0x30,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,0x8(%rax)
  movsd  -0x18(%rbp),%xmm1
  movsd  D357(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x48(%rbp),%rax
  add    $0x30,%rax
  movsd  D255(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,0x10(%rax)
  mov    -0x48(%rbp),%rax
  add    $0x48,%rax
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x48(%rbp),%rax
  add    $0x48,%rax
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,0x8(%rax)
  mov    -0x48(%rbp),%rax
  add    $0x48,%rax
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,0x10(%rax)
  mov    -0x48(%rbp),%rax
  add    $0x60,%rax
  movsd  -0x20(%rbp),%xmm1
  movsd  D357(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x48(%rbp),%rax
  add    $0x60,%rax
  movsd  -0x28(%rbp),%xmm1
  movsd  D357(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,0x8(%rax)
  mov    -0x48(%rbp),%rax
  add    $0x60,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,0x10(%rax)
  mov    -0x48(%rbp),%rax
  add    $0x78,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x48(%rbp),%rax
  add    $0x78,%rax
  movsd  -0x18(%rbp),%xmm1
  movsd  D357(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,0x8(%rax)
  mov    -0x48(%rbp),%rax
  add    $0x78,%rax
  movsd  -0x20(%rbp),%xmm1
  movsd  D357(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,0x10(%rax)
  mov    -0x48(%rbp),%rax
  add    $0x90,%rax
  movsd  -0x18(%rbp),%xmm1
  movsd  D357(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x48(%rbp),%rax
  add    $0x90,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,0x8(%rax)
  mov    -0x48(%rbp),%rax
  add    $0x90,%rax
  movsd  -0x28(%rbp),%xmm1
  movsd  D357(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,0x10(%rax)
  movsd  -0x28(%rbp),%xmm1
  movsd  D318(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D357(%rip),%xmm0
  subsd  %xmm1,%xmm0
  movsd  -0x20(%rbp),%xmm2
  movsd  D357(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  movsd  -0x18(%rbp),%xmm2
  movsd  D357(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  mov    -0x48(%rbp),%rax
  add    $0xa8,%rax
  subsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x48(%rbp),%rax
  add    $0xa8,%rax
  movsd  -0x28(%rbp),%xmm1
  movsd  D449(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,0x8(%rax)
  mov    -0x48(%rbp),%rax
  add    $0xa8,%rax
  movsd  -0x28(%rbp),%xmm1
  movsd  D449(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,0x10(%rax)
  mov    -0x48(%rbp),%rax
  add    $0xc0,%rax
  movsd  -0x20(%rbp),%xmm1
  movsd  D449(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x28(%rbp),%xmm1
  movsd  D357(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D357(%rip),%xmm0
  subsd  %xmm1,%xmm0
  movsd  -0x20(%rbp),%xmm2
  movsd  D318(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  movsd  -0x18(%rbp),%xmm2
  movsd  D357(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  mov    -0x48(%rbp),%rax
  add    $0xc0,%rax
  subsd  %xmm1,%xmm0
  movsd  %xmm0,0x8(%rax)
  mov    -0x48(%rbp),%rax
  add    $0xc0,%rax
  movsd  -0x20(%rbp),%xmm1
  movsd  D449(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,0x10(%rax)
  mov    -0x48(%rbp),%rax
  add    $0xd8,%rax
  movsd  -0x18(%rbp),%xmm1
  movsd  D449(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x48(%rbp),%rax
  add    $0xd8,%rax
  movsd  -0x18(%rbp),%xmm1
  movsd  D449(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,0x8(%rax)
  movsd  -0x28(%rbp),%xmm1
  movsd  D357(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D357(%rip),%xmm0
  subsd  %xmm1,%xmm0
  movsd  -0x20(%rbp),%xmm2
  movsd  D357(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  movsd  -0x18(%rbp),%xmm2
  movsd  D318(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  mov    -0x48(%rbp),%rax
  add    $0xd8,%rax
  subsd  %xmm1,%xmm0
  movsd  %xmm0,0x10(%rax)
  nop
  pop    %rbp
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D255
type_infered: f64
name: extract_symbolic_data
arguments: data_label: D357
type_infered: f64
name: extract_symbolic_data
arguments: data_label: D115
type_infered: f64
name: extract_symbolic_data
arguments: data_label: D318
type_infered: f64
name: extract_symbolic_data
arguments: data_label: D449
type_infered: f32[2]

tool: D255: 1

tool: D357: 4

tool: D115: 3

tool: D318: 8

tool: {"D449": [0.0,-2.25]}

assistant: ```c
void TetQuadLag(double *par, double *N, double dN[][3]) {
  double r = par[0], s = par[1], t = par[2], t8, t4;
  t8 = 1.0 - r - s - t;
  N[0] = (2.0 * r - 1.0) * r;
  N[1] = (2.0 * s - 1.0) * s;
  N[2] = (2.0 * t - 1.0) * t;
  N[3] = (1.0 - 2.0 * r - 2.0 * s - 2.0 * t) * t8;
  N[4] = 4.0 * r * s;
  N[5] = 4.0 * s * t;
  N[6] = 4.0 * t * r;
  N[7] = 4.0 * r * t8;
  N[8] = 4.0 * s * t8;
  N[9] = 4.0 * t * t8;
  t4 = -3.0 + 4.0 * r + 4.0 * s + 4.0 * t;
  dN[0][0] = 4.0 * r - 1.0;
  dN[0][1] = 0.0;
  dN[0][2] = 0.0;
  dN[1][0] = 0.0;
  dN[1][1] = 4.0 * s - 1.0;
  dN[1][2] = 0.0;
  dN[2][0] = 0.0;
  dN[2][1] = 0.0;
  dN[2][2] = 4.0 * t - 1.0;
  dN[3][0] = t4;
  dN[3][1] = t4;
  dN[3][2] = t4;
  dN[4][0] = 4.0 * s;
  dN[4][1] = 4.0 * r;
  dN[4][2] = 0.0;
  dN[5][0] = 0.0;
  dN[5][1] = 4.0 * t;
  dN[5][2] = 4.0 * s;
  dN[6][0] = 4.0 * t;
  dN[6][1] = 0.0;
  dN[6][2] = 4.0 * r;
  dN[7][0] = 4.0 - 8.0 * r - 4.0 * s - 4.0 * t;
  dN[7][1] = -4.0 * r;
  dN[7][2] = -4.0 * r;
  dN[8][0] = -4.0 * s;
  dN[8][1] = 4.0 - 4.0 * r - 8.0 * s - 4.0 * t;
  dN[8][2] = -4.0 * s;
  dN[9][0] = -4.0 * t;
  dN[9][1] = -4.0 * t;
  dN[9][2] = 4.0 - 4.0 * r - 4.0 * s - 8.0 * t;
}
```