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

```asm
<interpolate_order4_square>:
  endbr64
  movapd %xmm0,%xmm2
  movapd %xmm0,%xmm12
  mulsd  D5(%rip),%xmm12
  mulsd  %xmm1,%xmm12
  movsd  D89(%rip),%xmm4
  movapd %xmm0,%xmm7
  subsd  %xmm4,%xmm7
  movsd  D72(%rip),%xmm5
  movapd %xmm0,%xmm6
  subsd  %xmm5,%xmm6
  movapd %xmm0,%xmm11
  addsd  %xmm5,%xmm11
  movapd %xmm12,%xmm0
  mulsd  %xmm7,%xmm0
  mulsd  %xmm6,%xmm0
  mulsd  %xmm11,%xmm0
  movapd %xmm1,%xmm9
  subsd  %xmm4,%xmm9
  movapd %xmm1,%xmm3
  subsd  %xmm5,%xmm3
  addsd  %xmm1,%xmm5
  movsd  %xmm0,-0x28(%rsp)
  mulsd  %xmm9,%xmm0
  mulsd  %xmm3,%xmm0
  mulsd  %xmm5,%xmm0
  movsd  %xmm0,(%rdi)
  movapd %xmm2,%xmm15
  mulsd  D54(%rip),%xmm15
  mulsd  %xmm1,%xmm15
  movapd %xmm7,%xmm13
  mulsd  %xmm15,%xmm13
  movapd %xmm13,%xmm0
  movapd %xmm6,%xmm13
  mulsd  %xmm0,%xmm13
  movapd %xmm2,%xmm10
  addsd  %xmm4,%xmm10
  movapd %xmm13,%xmm14
  mulsd  %xmm10,%xmm14
  movsd  %xmm14,-0x20(%rsp)
  movapd %xmm14,%xmm8
  mulsd  %xmm9,%xmm8
  mulsd  %xmm3,%xmm8
  mulsd  %xmm5,%xmm8
  movsd  %xmm8,0x8(%rdi)
  movsd  D26(%rip),%xmm14
  mulsd  %xmm1,%xmm14
  movapd %xmm14,%xmm8
  mulsd  %xmm7,%xmm8
  mulsd  %xmm6,%xmm8
  mulsd  %xmm11,%xmm8
  movapd %xmm8,%xmm14
  mulsd  %xmm10,%xmm14
  movsd  %xmm14,-0x18(%rsp)
  movapd %xmm14,%xmm8
  mulsd  %xmm9,%xmm8
  mulsd  %xmm3,%xmm8
  mulsd  %xmm5,%xmm8
  movsd  %xmm8,0x10(%rdi)
  mulsd  %xmm11,%xmm0
  movapd %xmm0,%xmm14
  mulsd  %xmm10,%xmm14
  movsd  %xmm14,-0x10(%rsp)
  mulsd  %xmm9,%xmm14
  movapd %xmm14,%xmm0
  mulsd  %xmm3,%xmm0
  mulsd  %xmm5,%xmm0
  movsd  %xmm0,0x18(%rdi)
  mulsd  %xmm6,%xmm12
  mulsd  %xmm11,%xmm12
  mulsd  %xmm10,%xmm12
  movapd %xmm9,%xmm8
  mulsd  %xmm12,%xmm8
  movapd %xmm8,%xmm0
  mulsd  %xmm3,%xmm0
  mulsd  %xmm5,%xmm0
  movsd  %xmm0,0x20(%rdi)
  mulsd  %xmm11,%xmm13
  mulsd  %xmm9,%xmm13
  addsd  %xmm1,%xmm4
  movapd %xmm3,%xmm8
  mulsd  %xmm13,%xmm8
  movapd %xmm8,%xmm0
  mulsd  %xmm4,%xmm0
  movsd  %xmm0,0x28(%rdi)
  movapd %xmm2,%xmm8
  mulsd  D19(%rip),%xmm8
  mulsd  %xmm1,%xmm8
  mulsd  %xmm7,%xmm8
  movapd %xmm6,%xmm14
  mulsd  %xmm8,%xmm14
  mulsd  %xmm10,%xmm14
  mulsd  %xmm9,%xmm14
  movapd %xmm3,%xmm0
  mulsd  %xmm14,%xmm0
  mulsd  %xmm4,%xmm0
  movsd  %xmm0,0x30(%rdi)
  movsd  D42(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  %xmm7,%xmm0
  mulsd  %xmm6,%xmm0
  mulsd  %xmm11,%xmm0
  mulsd  %xmm10,%xmm0
  mulsd  %xmm9,%xmm0
  movapd %xmm3,%xmm1
  mulsd  %xmm0,%xmm1
  mulsd  %xmm4,%xmm1
  movsd  %xmm1,0x38(%rdi)
  mulsd  %xmm11,%xmm8
  mulsd  %xmm10,%xmm8
  mulsd  %xmm9,%xmm8
  movapd %xmm3,%xmm1
  mulsd  %xmm8,%xmm1
  mulsd  %xmm4,%xmm1
  movsd  %xmm1,0x40(%rdi)
  movapd %xmm15,%xmm1
  mulsd  %xmm6,%xmm1
  mulsd  %xmm11,%xmm1
  mulsd  %xmm10,%xmm1
  mulsd  %xmm9,%xmm1
  movapd %xmm3,%xmm15
  movsd  %xmm1,-0x8(%rsp)
  mulsd  %xmm1,%xmm15
  mulsd  %xmm4,%xmm15
  movsd  %xmm15,0x48(%rdi)
  movsd  D26(%rip),%xmm15
  mulsd  %xmm2,%xmm15
  movapd %xmm7,%xmm1
  mulsd  %xmm15,%xmm1
  mulsd  %xmm6,%xmm1
  mulsd  %xmm11,%xmm1
  mulsd  %xmm9,%xmm1
  mulsd  %xmm3,%xmm1
  mulsd  %xmm5,%xmm1
  mulsd  %xmm4,%xmm1
  movsd  %xmm1,0x50(%rdi)
  mulsd  D42(%rip),%xmm2
  mulsd  %xmm7,%xmm2
  movapd %xmm6,%xmm1
  mulsd  %xmm2,%xmm1
  mulsd  %xmm10,%xmm1
  mulsd  %xmm9,%xmm1
  mulsd  %xmm3,%xmm1
  mulsd  %xmm5,%xmm1
  mulsd  %xmm4,%xmm1
  movsd  %xmm1,0x58(%rdi)
  mulsd  D73(%rip),%xmm7
  mulsd  %xmm6,%xmm7
  mulsd  %xmm11,%xmm7
  mulsd  %xmm10,%xmm7
  mulsd  %xmm9,%xmm7
  mulsd  %xmm3,%xmm7
  mulsd  %xmm5,%xmm7
  mulsd  %xmm4,%xmm7
  movsd  %xmm7,0x60(%rdi)
  mulsd  %xmm11,%xmm2
  mulsd  %xmm10,%xmm2
  mulsd  %xmm9,%xmm2
  mulsd  %xmm3,%xmm2
  mulsd  %xmm5,%xmm2
  mulsd  %xmm4,%xmm2
  movsd  %xmm2,0x68(%rdi)
  mulsd  %xmm15,%xmm6
  mulsd  %xmm11,%xmm6
  mulsd  %xmm10,%xmm6
  mulsd  %xmm9,%xmm6
  mulsd  %xmm3,%xmm6
  mulsd  %xmm5,%xmm6
  mulsd  %xmm4,%xmm6
  movsd  %xmm6,0x70(%rdi)
  mulsd  %xmm5,%xmm13
  mulsd  %xmm4,%xmm13
  movsd  %xmm13,0x78(%rdi)
  mulsd  %xmm5,%xmm14
  mulsd  %xmm4,%xmm14
  movsd  %xmm14,0x80(%rdi)
  mulsd  %xmm5,%xmm0
  mulsd  %xmm4,%xmm0
  movsd  %xmm0,0x88(%rdi)
  mulsd  %xmm5,%xmm8
  mulsd  %xmm4,%xmm8
  movsd  %xmm8,0x90(%rdi)
  movsd  -0x8(%rsp),%xmm1
  mulsd  %xmm5,%xmm1
  mulsd  %xmm4,%xmm1
  movsd  %xmm1,0x98(%rdi)
  movsd  -0x28(%rsp),%xmm0
  mulsd  %xmm3,%xmm0
  mulsd  %xmm5,%xmm0
  mulsd  %xmm4,%xmm0
  movsd  %xmm0,0xa0(%rdi)
  movsd  -0x20(%rsp),%xmm0
  mulsd  %xmm3,%xmm0
  mulsd  %xmm5,%xmm0
  mulsd  %xmm4,%xmm0
  movsd  %xmm0,0xa8(%rdi)
  movsd  -0x18(%rsp),%xmm0
  mulsd  %xmm3,%xmm0
  mulsd  %xmm5,%xmm0
  mulsd  %xmm4,%xmm0
  movsd  %xmm0,0xb0(%rdi)
  movsd  -0x10(%rsp),%xmm0
  mulsd  %xmm3,%xmm0
  mulsd  %xmm5,%xmm0
  mulsd  %xmm4,%xmm0
  movsd  %xmm0,0xb8(%rdi)
  mulsd  %xmm12,%xmm3
  mulsd  %xmm5,%xmm3
  mulsd  %xmm4,%xmm3
  movsd  %xmm3,0xc0(%rdi)
  ret
```

tool_calls: name: read_data
arguments: data_tag: D5
type: f64
name: read_data
arguments: data_tag: D89
type: f64
name: read_data
arguments: data_tag: D72
type: f64
name: read_data
arguments: data_tag: D54
type: byte[8]
name: read_data
arguments: data_tag: D26
type: f64
name: read_data
arguments: data_tag: D19
type: f64
name: read_data
arguments: data_tag: D42
type: byte[8]
name: read_data
arguments: data_tag: D73
type: f64

tool: D5: 0.765625

tool: D89: 1

tool: D72: 0.654653670707977

tool: {"D54": [0x46,0x55,0x55,0x55,0x55,0x95,0xfc,0xbf]}

tool: D26: 2.04166666666667

tool: D19: 4.16840277777778

tool: {"D42": [0xe5,0x38,0x8e,0xe3,0x38,0x0e,0x13,0xc0]}

tool: D73: 5.44444444444445

assistant: ```c
void interpolate_order4_square(double epsilon, double eta, double *out_5590410397267881018) {
  out_5590410397267881018[0] = 0.765625 * epsilon * eta * (epsilon - 1.0) * (epsilon - 0.654653670707977) * (epsilon + 0.654653670707977) * (eta - 1.0) * (eta - 0.654653670707977) * (eta + 0.654653670707977);
  out_5590410397267881018[1] = -1.78645833333333 * epsilon * eta * (epsilon - 1.0) * (epsilon - 0.654653670707977) * (epsilon + 1.0) * (eta - 1.0) * (eta - 0.654653670707977) * (eta + 0.654653670707977);
  out_5590410397267881018[2] = 2.04166666666667 * eta * (epsilon - 1.0) * (epsilon - 0.654653670707977) * (epsilon + 0.654653670707977) * (epsilon + 1.0) * (eta - 1.0) * (eta - 0.654653670707977) * (eta + 0.654653670707977);
  out_5590410397267881018[3] = -1.78645833333333 * epsilon * eta * (epsilon - 1.0) * (epsilon + 0.654653670707977) * (epsilon + 1.0) * (eta - 1.0) * (eta - 0.654653670707977) * (eta + 0.654653670707977);
  out_5590410397267881018[4] = 0.765625 * epsilon * eta * (epsilon - 0.654653670707977) * (epsilon + 0.654653670707977) * (epsilon + 1.0) * (eta - 1.0) * (eta - 0.654653670707977) * (eta + 0.654653670707977);
  out_5590410397267881018[5] = -1.78645833333333 * epsilon * eta * (epsilon - 1.0) * (epsilon - 0.654653670707977) * (epsilon + 0.654653670707977) * (eta - 1.0) * (eta - 0.654653670707977) * (eta + 1.0);
  out_5590410397267881018[6] = 4.16840277777778 * epsilon * eta * (epsilon - 1.0) * (epsilon - 0.654653670707977) * (epsilon + 1.0) * (eta - 1.0) * (eta - 0.654653670707977) * (eta + 1.0);
  out_5590410397267881018[7] = -4.76388888888889 * eta * (epsilon - 1.0) * (epsilon - 0.654653670707977) * (epsilon + 0.654653670707977) * (epsilon + 1.0) * (eta - 1.0) * (eta - 0.654653670707977) * (eta + 1.0);
  out_5590410397267881018[8] = 4.16840277777778 * epsilon * eta * (epsilon - 1.0) * (epsilon + 0.654653670707977) * (epsilon + 1.0) * (eta - 1.0) * (eta - 0.654653670707977) * (eta + 1.0);
  out_5590410397267881018[9] = -1.78645833333333 * epsilon * eta * (epsilon - 0.654653670707977) * (epsilon + 0.654653670707977) * (epsilon + 1.0) * (eta - 1.0) * (eta - 0.654653670707977) * (eta + 1.0);
  out_5590410397267881018[10] = 2.04166666666667 * epsilon * (epsilon - 1.0) * (epsilon - 0.654653670707977) * (epsilon + 0.654653670707977) * (eta - 1.0) * (eta - 0.654653670707977) * (eta + 0.654653670707977) * (eta + 1.0);
  out_5590410397267881018[11] = -4.76388888888889 * epsilon * (epsilon - 1.0) * (epsilon - 0.654653670707977) * (epsilon + 1.0) * (eta - 1.0) * (eta - 0.654653670707977) * (eta + 0.654653670707977) * (eta + 1.0);
  out_5590410397267881018[12] = 5.44444444444445 * (epsilon - 1.0) * (epsilon - 0.654653670707977) * (epsilon + 0.654653670707977) * (epsilon + 1.0) * (eta - 1.0) * (eta - 0.654653670707977) * (eta + 0.654653670707977) * (eta + 1.0);
  out_5590410397267881018[13] = -4.76388888888889 * epsilon * (epsilon - 1.0) * (epsilon + 0.654653670707977) * (epsilon + 1.0) * (eta - 1.0) * (eta - 0.654653670707977) * (eta + 0.654653670707977) * (eta + 1.0);
  out_5590410397267881018[14] = 2.04166666666667 * epsilon * (epsilon - 0.654653670707977) * (epsilon + 0.654653670707977) * (epsilon + 1.0) * (eta - 1.0) * (eta - 0.654653670707977) * (eta + 0.654653670707977) * (eta + 1.0);
  out_5590410397267881018[15] = -1.78645833333333 * epsilon * eta * (epsilon - 1.0) * (epsilon - 0.654653670707977) * (epsilon + 0.654653670707977) * (eta - 1.0) * (eta + 0.654653670707977) * (eta + 1.0);
  out_5590410397267881018[16] = 4.16840277777778 * epsilon * eta * (epsilon - 1.0) * (epsilon - 0.654653670707977) * (epsilon + 1.0) * (eta - 1.0) * (eta + 0.654653670707977) * (eta + 1.0);
  out_5590410397267881018[17] = -4.76388888888889 * eta * (epsilon - 1.0) * (epsilon - 0.654653670707977) * (epsilon + 0.654653670707977) * (epsilon + 1.0) * (eta - 1.0) * (eta + 0.654653670707977) * (eta + 1.0);
  out_5590410397267881018[18] = 4.16840277777778 * epsilon * eta * (epsilon - 1.0) * (epsilon + 0.654653670707977) * (epsilon + 1.0) * (eta - 1.0) * (eta + 0.654653670707977) * (eta + 1.0);
  out_5590410397267881018[19] = -1.78645833333333 * epsilon * eta * (epsilon - 0.654653670707977) * (epsilon + 0.654653670707977) * (epsilon + 1.0) * (eta - 1.0) * (eta + 0.654653670707977) * (eta + 1.0);
  out_5590410397267881018[20] = 0.765625 * epsilon * eta * (epsilon - 1.0) * (epsilon - 0.654653670707977) * (epsilon + 0.654653670707977) * (eta - 0.654653670707977) * (eta + 0.654653670707977) * (eta + 1.0);
  out_5590410397267881018[21] = -1.78645833333333 * epsilon * eta * (epsilon - 1.0) * (epsilon - 0.654653670707977) * (epsilon + 1.0) * (eta - 0.654653670707977) * (eta + 0.654653670707977) * (eta + 1.0);
  out_5590410397267881018[22] = 2.04166666666667 * eta * (epsilon - 1.0) * (epsilon - 0.654653670707977) * (epsilon + 0.654653670707977) * (epsilon + 1.0) * (eta - 0.654653670707977) * (eta + 0.654653670707977) * (eta + 1.0);
  out_5590410397267881018[23] = -1.78645833333333 * epsilon * eta * (epsilon - 1.0) * (epsilon + 0.654653670707977) * (epsilon + 1.0) * (eta - 0.654653670707977) * (eta + 0.654653670707977) * (eta + 1.0);
  out_5590410397267881018[24] = 0.765625 * epsilon * eta * (epsilon - 0.654653670707977) * (epsilon + 0.654653670707977) * (epsilon + 1.0) * (eta - 0.654653670707977) * (eta + 0.654653670707977) * (eta + 1.0);
}
```