user: 请从给定的汇编指令推导出C源代码:

```asm
<TetQuadLag>:
  endbr64
  movupd (%rdi),%xmm0
  movupd 0x8(%rdi),%xmm10
  movapd D3(%rip),%xmm9
  movapd D36(%rip),%xmm11
  movapd %xmm0,%xmm1
  movapd %xmm0,%xmm3
  movapd %xmm10,%xmm6
  mulpd  %xmm0,%xmm9
  addpd  %xmm0,%xmm1
  unpckhpd %xmm3,%xmm3
  unpckhpd %xmm6,%xmm6
  movapd %xmm0,%xmm8
  addpd  %xmm1,%xmm11
  mulpd  %xmm9,%xmm10
  movapd %xmm9,%xmm7
  movapd %xmm9,%xmm5
  unpckhpd %xmm7,%xmm7
  movapd %xmm7,%xmm4
  movapd %xmm3,%xmm7
  movapd %xmm6,%xmm3
  movsd  D61(%rip),%xmm6
  movapd %xmm6,%xmm2
  subsd  %xmm0,%xmm2
  mulpd  %xmm11,%xmm0
  movapd %xmm3,%xmm11
  movups %xmm10,0x20(%rsi)
  addsd  %xmm3,%xmm11
  subsd  %xmm7,%xmm2
  movups %xmm0,(%rsi)
  movapd %xmm11,%xmm0
  subsd  %xmm6,%xmm0
  subsd  %xmm3,%xmm2
  mulsd  %xmm3,%xmm0
  movsd  %xmm0,0x10(%rsi)
  movapd %xmm6,%xmm0
  subsd  %xmm1,%xmm0
  unpckhpd %xmm1,%xmm1
  subsd  %xmm1,%xmm0
  movsd  D3(%rip),%xmm1
  subsd  %xmm11,%xmm0
  mulsd  %xmm2,%xmm0
  movsd  %xmm0,0x18(%rsi)
  movapd %xmm3,%xmm0
  mulsd  %xmm1,%xmm0
  movapd %xmm0,%xmm10
  mulsd  %xmm8,%xmm10
  movsd  %xmm10,0x30(%rsi)
  movapd %xmm2,%xmm10
  mulsd  %xmm0,%xmm2
  unpcklpd %xmm10,%xmm10
  mulpd  %xmm10,%xmm9
  movsd  %xmm2,0x48(%rsi)
  movapd %xmm5,%xmm2
  subsd  D67(%rip),%xmm2
  movups %xmm9,0x38(%rsi)
  movapd %xmm5,%xmm9
  subsd  %xmm6,%xmm9
  movsd  %xmm5,0x68(%rdx)
  addsd  %xmm4,%xmm2
  movsd  %xmm0,0x80(%rdx)
  movq   $0x0,0x8(%rdx)
  movsd  %xmm9,(%rdx)
  movapd %xmm4,%xmm9
  subsd  %xmm6,%xmm9
  addsd  %xmm0,%xmm2
  movq   $0x0,0x10(%rdx)
  movq   $0x0,0x18(%rdx)
  movq   $0x0,0x28(%rdx)
  movsd  %xmm9,0x20(%rdx)
  movapd %xmm0,%xmm9
  subsd  %xmm6,%xmm9
  movsd  %xmm2,0x48(%rdx)
  movsd  %xmm2,0x50(%rdx)
  movsd  %xmm2,0x58(%rdx)
  movapd %xmm1,%xmm2
  subsd  %xmm5,%xmm1
  movq   $0x0,0x30(%rdx)
  movq   $0x0,0x38(%rdx)
  movq   $0x0,0x70(%rdx)
  movq   $0x0,0x78(%rdx)
  movsd  %xmm9,0x40(%rdx)
  movsd  %xmm4,0x60(%rdx)
  movsd  %xmm4,0x88(%rdx)
  movsd  %xmm0,0x90(%rdx)
  movsd  D2(%rip),%xmm6
  movsd  %xmm5,0xa0(%rdx)
  movq   $0x0,0x98(%rdx)
  mulsd  %xmm6,%xmm8
  mulsd  %xmm6,%xmm7
  mulsd  %xmm6,%xmm3
  subsd  %xmm8,%xmm2
  movapd %xmm5,%xmm8
  movapd %xmm1,%xmm5
  subsd  %xmm7,%xmm5
  subsd  %xmm4,%xmm1
  subsd  %xmm4,%xmm2
  subsd  %xmm0,%xmm5
  subsd  %xmm3,%xmm1
  subsd  %xmm0,%xmm2
  movsd  %xmm5,0xc8(%rdx)
  movsd  %xmm1,0xe8(%rdx)
  movsd  %xmm2,0xa8(%rdx)
  movq   D41(%rip),%xmm2
  xorpd  %xmm2,%xmm8
  xorpd  %xmm2,%xmm0
  movsd  %xmm8,0xb0(%rdx)
  movsd  %xmm8,0xb8(%rdx)
  movapd %xmm4,%xmm8
  xorpd  %xmm2,%xmm8
  movsd  %xmm0,0xd8(%rdx)
  movsd  %xmm8,0xc0(%rdx)
  movsd  %xmm8,0xd0(%rdx)
  movsd  %xmm0,0xe0(%rdx)
  ret
```

tool_calls: name: unpack_data
arguments: tag: D3
type_infered: f64[2]
name: unpack_data
arguments: tag: D36
type_infered: f32[4]
name: unpack_data
arguments: tag: D61
type_infered: f64
name: unpack_data
arguments: tag: D67
type_infered: f64
name: unpack_data
arguments: tag: D2
type_infered: f64
name: unpack_data
arguments: tag: D41
type_infered: f32[2]

tool: {"D3": [4.0,4.0]}

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

tool: D61: 1

tool: D67: 3

tool: D2: 8

tool: {"D41": [0.0,-0.0]}

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;
}
```