user: Translate the below assembly code into C programming language:

```asm
<point_in_triangle>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xa8,%rsp
  movsd  %xmm0,-0xe8(%rbp)
  movsd  %xmm1,-0xf0(%rbp)
  movsd  %xmm2,-0xf8(%rbp)
  movsd  %xmm3,-0x100(%rbp)
  movsd  %xmm4,-0x108(%rbp)
  movsd  %xmm5,-0x110(%rbp)
  movsd  %xmm6,-0x118(%rbp)
  movsd  %xmm7,-0x120(%rbp)
  movsd  -0x118(%rbp),%xmm0
  subsd  -0x100(%rbp),%xmm0
  movsd  %xmm0,-0xd8(%rbp)
  movsd  -0x120(%rbp),%xmm0
  subsd  -0x108(%rbp),%xmm0
  movsd  %xmm0,-0xd0(%rbp)
  movsd  0x10(%rbp),%xmm0
  subsd  -0x110(%rbp),%xmm0
  movsd  %xmm0,-0xc8(%rbp)
  movsd  0x18(%rbp),%xmm0
  subsd  -0x118(%rbp),%xmm0
  movsd  %xmm0,-0xc0(%rbp)
  movsd  0x20(%rbp),%xmm0
  subsd  -0x120(%rbp),%xmm0
  movsd  %xmm0,-0xb8(%rbp)
  movsd  0x28(%rbp),%xmm0
  subsd  0x10(%rbp),%xmm0
  movsd  %xmm0,-0xb0(%rbp)
  movsd  -0x100(%rbp),%xmm0
  subsd  0x18(%rbp),%xmm0
  movsd  %xmm0,-0xa8(%rbp)
  movsd  -0x108(%rbp),%xmm0
  subsd  0x20(%rbp),%xmm0
  movsd  %xmm0,-0xa0(%rbp)
  movsd  -0x110(%rbp),%xmm0
  subsd  0x28(%rbp),%xmm0
  movsd  %xmm0,-0x98(%rbp)
  movsd  -0xe8(%rbp),%xmm0
  subsd  -0x100(%rbp),%xmm0
  movsd  %xmm0,-0x90(%rbp)
  movsd  -0xf0(%rbp),%xmm0
  subsd  -0x108(%rbp),%xmm0
  movsd  %xmm0,-0x88(%rbp)
  movsd  -0xf8(%rbp),%xmm0
  subsd  -0x110(%rbp),%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  -0xe8(%rbp),%xmm0
  subsd  -0x118(%rbp),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0xf0(%rbp),%xmm0
  subsd  -0x120(%rbp),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  -0xf8(%rbp),%xmm0
  subsd  0x10(%rbp),%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  -0xe8(%rbp),%xmm0
  subsd  0x18(%rbp),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0xf0(%rbp),%xmm0
  subsd  0x20(%rbp),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movsd  -0xf8(%rbp),%xmm0
  subsd  0x28(%rbp),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  -0x88(%rbp),%xmm0
  mulsd  -0xc8(%rbp),%xmm0
  movsd  -0x80(%rbp),%xmm1
  mulsd  -0xd0(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x80(%rbp),%xmm0
  mulsd  -0xd8(%rbp),%xmm0
  movsd  -0x90(%rbp),%xmm1
  mulsd  -0xc8(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x90(%rbp),%xmm0
  mulsd  -0xd0(%rbp),%xmm0
  movsd  -0x88(%rbp),%xmm1
  mulsd  -0xd8(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  -0x70(%rbp),%xmm0
  mulsd  -0xb0(%rbp),%xmm0
  movsd  -0x68(%rbp),%xmm1
  mulsd  -0xb8(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x68(%rbp),%xmm0
  mulsd  -0xc0(%rbp),%xmm0
  movsd  -0x78(%rbp),%xmm1
  mulsd  -0xb0(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x78(%rbp),%xmm0
  mulsd  -0xb8(%rbp),%xmm0
  movsd  -0x70(%rbp),%xmm1
  mulsd  -0xc0(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x58(%rbp),%xmm0
  mulsd  -0x98(%rbp),%xmm0
  movsd  -0x50(%rbp),%xmm1
  mulsd  -0xa0(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x50(%rbp),%xmm0
  mulsd  -0xa8(%rbp),%xmm0
  movsd  -0x60(%rbp),%xmm1
  mulsd  -0x98(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x60(%rbp),%xmm0
  mulsd  -0xa0(%rbp),%xmm0
  movsd  -0x58(%rbp),%xmm1
  mulsd  -0xa8(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0xe0(%rbp)
  movsd  -0x48(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  js     L227
  movsd  -0x30(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  js     L227
  movsd  -0x18(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  js     L227
  movsd  -0xe0(%rbp),%xmm1
  movsd  D106(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0xe0(%rbp)
  jmp    L248
L227:
  movsd  -0x48(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  jg     L248
  movsd  -0x30(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  jg     L248
  movsd  -0x18(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  jg     L248
  movsd  -0xe0(%rbp),%xmm0
  movsd  D106(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0xe0(%rbp)
L248:
  movsd  -0x40(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  js     L15
  movsd  -0x28(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  js     L15
  movsd  -0x10(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  js     L15
  movsd  -0xe0(%rbp),%xmm1
  movsd  D106(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0xe0(%rbp)
  jmp    L62
L15:
  movsd  -0x40(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  jg     L62
  movsd  -0x28(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  jg     L62
  movsd  -0x10(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  jg     L62
  movsd  -0xe0(%rbp),%xmm0
  movsd  D106(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0xe0(%rbp)
L62:
  movsd  -0x38(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  js     L252
  movsd  -0x20(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  js     L252
  movsd  -0x8(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  js     L252
  movsd  -0xe0(%rbp),%xmm1
  movsd  D106(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0xe0(%rbp)
  jmp    L143
L252:
  movsd  -0x38(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  jg     L143
  movsd  -0x20(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  jg     L143
  movsd  -0x8(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  jg     L143
  movsd  -0xe0(%rbp),%xmm0
  movsd  D106(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0xe0(%rbp)
L143:
  movsd  -0xe0(%rbp),%xmm0
  ucomisd D46(%rip),%xmm0
  jp     L100
  movsd  -0xe0(%rbp),%xmm0
  ucomisd D46(%rip),%xmm0
  je     L246
L100:
  movsd  -0xe0(%rbp),%xmm0
  ucomisd D34(%rip),%xmm0
  jp     L73
  movsd  -0xe0(%rbp),%xmm0
  ucomisd D34(%rip),%xmm0
  jne    L73
L246:
  movsd  D106(%rip),%xmm0
  movsd  %xmm0,-0xe0(%rbp)
  jmp    L77
L73:
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0xe0(%rbp)
L77:
  movsd  -0xe0(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D106
type_infered: f64
name: extract_symbolic_data
arguments: data_tag: D46
type_infered: f32[2]
name: extract_symbolic_data
arguments: data_tag: D34
type_infered: f32[2]

tool: D106: 1

tool: {"D46": [0.0,2.125]}

tool: {"D34": [0.0,-2.125]}

assistant: ```c
double point_in_triangle(double point_x, double point_y, double point_z, double t1_x, double t1_y, double t1_z, double t2_x, double t2_y, double t2_z, double t3_x, double t3_y, double t3_z) {
  double answer;
  double answer1_x, answer1_y, answer1_z;
  double answer2_x, answer2_y, answer2_z;
  double answer3_x, answer3_y, answer3_z;
  double af1, af2, af3;
  double bf1, bf2, bf3;
  double cf1, cf2, cf3;
  double ab1, ab2, ab3;
  double bc1, bc2, bc3;
  double ca1, ca2, ca3;
  ab1 = (t2_x - t1_x);
  ab2 = (t2_y - t1_y);
  ab3 = (t2_z - t1_z);
  bc1 = (t3_x - t2_x);
  bc2 = (t3_y - t2_y);
  bc3 = (t3_z - t2_z);
  ca1 = (t1_x - t3_x);
  ca2 = (t1_y - t3_y);
  ca3 = (t1_z - t3_z);
  af1 = (point_x - t1_x);
  af2 = (point_y - t1_y);
  af3 = (point_z - t1_z);
  bf1 = (point_x - t2_x);
  bf2 = (point_y - t2_y);
  bf3 = (point_z - t2_z);
  cf1 = (point_x - t3_x);
  cf2 = (point_y - t3_y);
  cf3 = (point_z - t3_z);
  answer1_x = (af2 * ab3) - (af3 * ab2);
  answer1_y = (af3 * ab1) - (af1 * ab3);
  answer1_z = (af1 * ab2) - (af2 * ab1);
  answer2_x = (bf2 * bc3) - (bf3 * bc2);
  answer2_y = (bf3 * bc1) - (bf1 * bc3);
  answer2_z = (bf1 * bc2) - (bf2 * bc1);
  answer3_x = (cf2 * ca3) - (cf3 * ca2);
  answer3_y = (cf3 * ca1) - (cf1 * ca3);
  answer3_z = (cf1 * ca2) - (cf2 * ca1);
  answer = 0.0;
  if ((int)answer1_x >= 0 && (int)answer2_x >= 0 && (int)answer3_x >= 0) {
    answer += 1.0;
  } else if ((int)answer1_x <= 0 && (int)answer2_x <= 0 && (int)answer3_x <= 0) {
    answer -= 1.0;
  }
  if ((int)answer1_y >= 0 && (int)answer2_y >= 0 && (int)answer3_y >= 0) {
    answer += 1.0;
  } else if ((int)answer1_y <= 0 && (int)answer2_y <= 0 && (int)answer3_y <= 0) {
    answer -= 1.0;
  }
  if ((int)answer1_z >= 0 && (int)answer2_z >= 0 && (int)answer3_z >= 0) {
    answer += 1.0;
  } else if ((int)answer1_z <= 0 && (int)answer2_z <= 0 && (int)answer3_z <= 0) {
    answer -= 1.0;
  }
  if (answer == 3 || answer == -3) {
    answer = 1;
  } else {
    answer = 0;
  }
  return answer;
}
```