user: 请将以下的汇编代码转换成C语言代码:

```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)
  movl   $0x0,-0xdc(%rbp)
  movsd  -0x48(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  js     L40
  movsd  -0x30(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  js     L40
  movsd  -0x18(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  js     L40
  addl   $0x1,-0xdc(%rbp)
  jmp    L173
L40:
  movsd  -0x48(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  jg     L173
  movsd  -0x30(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  jg     L173
  movsd  -0x18(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  jg     L173
  subl   $0x1,-0xdc(%rbp)
L173:
  movsd  -0x40(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  js     L190
  movsd  -0x28(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  js     L190
  movsd  -0x10(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  js     L190
  addl   $0x1,-0xdc(%rbp)
  jmp    L189
L190:
  movsd  -0x40(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  jg     L189
  movsd  -0x28(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  jg     L189
  movsd  -0x10(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  jg     L189
  subl   $0x1,-0xdc(%rbp)
L189:
  movsd  -0x38(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  js     L217
  movsd  -0x20(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  js     L217
  movsd  -0x8(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  test   %eax,%eax
  js     L217
  addl   $0x1,-0xdc(%rbp)
  jmp    L143
L217:
  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
  subl   $0x1,-0xdc(%rbp)
L143:
  cmpl   $0x3,-0xdc(%rbp)
  je     L193
  cmpl   $0xfffffffd,-0xdc(%rbp)
  jne    L165
L193:
  movl   $0x1,-0xdc(%rbp)
  jmp    L49
L165:
  movl   $0x0,-0xdc(%rbp)
L49:
  mov    -0xdc(%rbp),%eax
  leave
  ret
```

assistant: ```c
int 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) {
  int 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;
  if ((int)answer1_x >= 0 && (int)answer2_x >= 0 && (int)answer3_x >= 0) {
    answer++;
  } else if ((int)answer1_x <= 0 && (int)answer2_x <= 0 && (int)answer3_x <= 0) {
    answer--;
  }
  if ((int)answer1_y >= 0 && (int)answer2_y >= 0 && (int)answer3_y >= 0) {
    answer++;
  } else if ((int)answer1_y <= 0 && (int)answer2_y <= 0 && (int)answer3_y <= 0) {
    answer--;
  }
  if ((int)answer1_z >= 0 && (int)answer2_z >= 0 && (int)answer3_z >= 0) {
    answer++;
  } else if ((int)answer1_z <= 0 && (int)answer2_z <= 0 && (int)answer3_z <= 0) {
    answer--;
  }
  if (answer == 3 || answer == -3) {
    answer = 1;
  } else {
    answer = 0;
  }
  return (answer);
}
```