user: What is the c source code of the assembly code below:

```asm
<bilinear>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  movsd  %xmm0,-0x18(%rbp)
  movsd  %xmm1,-0x20(%rbp)
  movsd  %xmm2,-0x28(%rbp)
  movsd  %xmm3,-0x30(%rbp)
  movsd  %xmm4,-0x38(%rbp)
  movsd  %xmm5,-0x40(%rbp)
  movsd  %xmm6,-0x48(%rbp)
  movsd  %xmm7,-0x50(%rbp)
  movsd  -0x20(%rbp),%xmm0
  ucomisd -0x30(%rbp),%xmm0
  jp     L61
  movsd  -0x20(%rbp),%xmm0
  ucomisd -0x30(%rbp),%xmm0
  jne    L61
  movsd  -0x18(%rbp),%xmm0
  ucomisd -0x28(%rbp),%xmm0
  jp     L61
  movsd  -0x18(%rbp),%xmm0
  ucomisd -0x28(%rbp),%xmm0
  jne    L61
  movsd  -0x48(%rbp),%xmm0
  jmp    L118
L61:
  movsd  -0x20(%rbp),%xmm0
  ucomisd -0x30(%rbp),%xmm0
  jp     L4
  movsd  -0x20(%rbp),%xmm0
  ucomisd -0x30(%rbp),%xmm0
  jne    L4
  movsd  -0x18(%rbp),%xmm0
  ucomisd -0x28(%rbp),%xmm0
  jp     L90
  movsd  -0x18(%rbp),%xmm0
  ucomisd -0x28(%rbp),%xmm0
  je     L4
L90:
  movsd  -0x38(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  0x18(%rbp),%xmm1
  movsd  -0x28(%rbp),%xmm0
  subsd  -0x38(%rbp),%xmm0
  mulsd  -0x48(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  -0x28(%rbp),%xmm1
  subsd  -0x18(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  jmp    L118
L4:
  movsd  -0x18(%rbp),%xmm0
  ucomisd -0x28(%rbp),%xmm0
  jp     L137
  movsd  -0x18(%rbp),%xmm0
  ucomisd -0x28(%rbp),%xmm0
  jne    L137
  movsd  -0x20(%rbp),%xmm0
  ucomisd -0x30(%rbp),%xmm0
  jp     L82
  movsd  -0x20(%rbp),%xmm0
  ucomisd -0x30(%rbp),%xmm0
  je     L137
L82:
  movsd  -0x40(%rbp),%xmm0
  subsd  -0x20(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  0x18(%rbp),%xmm1
  movsd  -0x30(%rbp),%xmm0
  subsd  -0x40(%rbp),%xmm0
  mulsd  -0x48(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  -0x30(%rbp),%xmm1
  subsd  -0x20(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  jmp    L118
L137:
  movsd  -0x30(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  -0x20(%rbp),%xmm1
  movsd  -0x28(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x40(%rbp),%xmm0
  subsd  -0x20(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  0x18(%rbp),%xmm1
  movsd  -0x38(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x30(%rbp),%xmm0
  subsd  -0x40(%rbp),%xmm0
  movapd %xmm0,%xmm2
  mulsd  -0x50(%rbp),%xmm2
  movsd  -0x38(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0x40(%rbp),%xmm0
  subsd  -0x20(%rbp),%xmm0
  movapd %xmm0,%xmm2
  mulsd  0x10(%rbp),%xmm2
  movsd  -0x28(%rbp),%xmm0
  subsd  -0x38(%rbp),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0x30(%rbp),%xmm0
  subsd  -0x40(%rbp),%xmm0
  movapd %xmm0,%xmm2
  mulsd  -0x48(%rbp),%xmm2
  movsd  -0x28(%rbp),%xmm0
  subsd  -0x38(%rbp),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  divsd  -0x8(%rbp),%xmm0
L118:
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  pop    %rbp
  ret
```

assistant: ```c
double bilinear(double x1, double y1, double x2, double y2, double x, double y, double z11, double z12, double z21, double z22) {
  double delta;
  if (y1 == y2 && x1 == x2)
    return (z11);
  if (y1 == y2 && x1 != x2)
    return (z22 * (x - x1) + z11 * (x2 - x)) / (x2 - x1);
  if (x1 == x2 && y1 != y2)
    return (z22 * (y - y1) + z11 * (y2 - y)) / (y2 - y1);
  delta = (y2 - y1) * (x2 - x1);
  return (z22 * (y - y1) * (x - x1) + z12 * (y2 - y) * (x - x1) + z21 * (y - y1) * (x2 - x) + z11 * (y2 - y) * (x2 - x)) / delta;
}
```