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

```asm
<approximate_intersection_pt>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%r12
  mov    %rsi,%rbp
  mov    %rdx,%rbx
  mov    0x8(%rdi),%eax
  cmp    %eax,(%rdi)
  setne  %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    0xc(%r12),%eax
  cmp    %eax,0x4(%r12)
  setne  %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    (%r12),%eax
  lea    (%rax,%rax,2),%esi
  movslq %esi,%rsi
  lea    0x2(%rsi),%rax
  lea    0x0(,%rax,8),%r10
  movsd  0x0(%rbp,%rax,8),%xmm2
  mov    0x4(%r12),%eax
  lea    (%rax,%rax,2),%edx
  movslq %edx,%rdx
  lea    0x2(%rdx),%rax
  lea    0x0(,%rax,8),%rdi
  movsd  0x0(%rbp,%rax,8),%xmm1
  mov    0x8(%r12),%eax
  lea    (%rax,%rax,2),%ecx
  movslq %ecx,%rcx
  lea    0x2(%rcx),%rax
  lea    0x0(,%rax,8),%r9
  movsd  0x0(%rbp,%rax,8),%xmm0
  mov    0xc(%r12),%eax
  lea    (%rax,%rax,2),%eax
  cltq
  lea    0x2(%rax),%r11
  lea    0x0(,%r11,8),%r8
  movsd  0x0(%rbp,%r11,8),%xmm7
  movapd %xmm1,%xmm3
  subsd  %xmm2,%xmm3
  movapd %xmm7,%xmm4
  subsd  %xmm0,%xmm4
  subsd  %xmm4,%xmm3
  movapd %xmm3,%xmm4
  andpd  D15(%rip),%xmm4
  comisd D29(%rip),%xmm4
  jbe    L11
  movapd %xmm0,%xmm4
  subsd  %xmm2,%xmm4
  divsd  %xmm3,%xmm4
L15:
  movsd  D12(%rip),%xmm3
  subsd  %xmm4,%xmm3
  movapd %xmm3,%xmm6
  mulsd  %xmm2,%xmm6
  movapd %xmm4,%xmm5
  mulsd  %xmm1,%xmm5
  addsd  %xmm5,%xmm6
  movapd %xmm0,%xmm5
  subsd  %xmm2,%xmm5
  subsd  %xmm6,%xmm0
  divsd  %xmm5,%xmm0
  movapd %xmm6,%xmm8
  subsd  %xmm2,%xmm8
  divsd  %xmm5,%xmm8
  movapd %xmm0,%xmm5
  mulsd  -0x8(%rbp,%r10,1),%xmm5
  movapd %xmm8,%xmm2
  mulsd  -0x8(%rbp,%r9,1),%xmm2
  addsd  %xmm2,%xmm5
  movapd %xmm1,%xmm9
  subsd  %xmm7,%xmm9
  movapd %xmm6,%xmm2
  subsd  %xmm7,%xmm2
  divsd  %xmm9,%xmm2
  subsd  %xmm6,%xmm1
  divsd  %xmm9,%xmm1
  movapd %xmm2,%xmm7
  mulsd  -0x8(%rbp,%rdi,1),%xmm7
  movapd %xmm1,%xmm9
  mulsd  -0x8(%rbp,%r8,1),%xmm9
  addsd  %xmm9,%xmm7
  mulsd  0x0(%rbp,%rsi,8),%xmm0
  mulsd  0x0(%rbp,%rcx,8),%xmm8
  addsd  %xmm8,%xmm0
  mulsd  %xmm3,%xmm0
  mulsd  0x0(%rbp,%rdx,8),%xmm2
  mulsd  0x0(%rbp,%rax,8),%xmm1
  addsd  %xmm1,%xmm2
  mulsd  %xmm4,%xmm2
  addsd  %xmm2,%xmm0
  movsd  %xmm0,(%rbx)
  mulsd  %xmm5,%xmm3
  mulsd  %xmm7,%xmm4
  addsd  %xmm4,%xmm3
  movsd  %xmm3,0x8(%rbx)
  movsd  %xmm6,0x10(%rbx)
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L11:
  pxor   %xmm4,%xmm4
  jmp    L15
```

tool_calls: name: read_data
arguments: label: D15
type_guessed: qword[2]
name: read_data
arguments: label: D29
type_guessed: f64[2]
name: read_data
arguments: label: D12
type_guessed: f64

tool: {"D15": [0x7fffffffffffffff,0x0000000000000000]}

tool: {"D29": [0.0,1.0]}

tool: D12: 1

assistant: ```c
void approximate_intersection_pt(int *L, double *c, double *pt) {
  double a;
  double z0, z1, z2, z3;
  double b1, b2;
  double x1, y1;
  double x2, y2;
  double z;
  assert(L[0] != L[2]);
  assert(L[1] != L[3]);
  z0 = c[3 * L[0] + 2];
  z1 = c[3 * L[1] + 2];
  z2 = c[3 * L[2] + 2];
  z3 = c[3 * L[3] + 2];
  if (fabs((z1 - z0) - (z3 - z2)) > 0.0) {
    a = (z2 - z0) / ((z1 - z0) - (z3 - z2));
  } else {
    a = 0;
  }
  z = z0 * (1.0 - a) + z1 * a;
  b1 = (z2 - z) / (z2 - z0);
  b2 = (z - z0) / (z2 - z0);
  x1 = c[3 * L[0] + 0] * b1 + c[3 * L[2] + 0] * b2;
  y1 = c[3 * L[0] + 1] * b1 + c[3 * L[2] + 1] * b2;
  b1 = (z - z3) / (z1 - z3);
  b2 = (z1 - z) / (z1 - z3);
  x2 = c[3 * L[1] + 0] * b1 + c[3 * L[3] + 0] * b2;
  y2 = c[3 * L[1] + 1] * b1 + c[3 * L[3] + 1] * b2;
  pt[0] = x1 * (1.0 - a) + x2 * a;
  pt[1] = y1 * (1.0 - a) + y2 * a;
  pt[2] = z;
}
```