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

```asm
<threeintpts>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  movsd  %xmm0,-0x38(%rbp)
  movsd  %xmm1,-0x40(%rbp)
  movsd  %xmm2,-0x48(%rbp)
  movsd  %xmm3,-0x50(%rbp)
  movsd  %xmm4,-0x58(%rbp)
  movsd  %xmm5,-0x60(%rbp)
  movsd  %xmm6,-0x68(%rbp)
  movsd  %xmm7,-0x70(%rbp)
  mov    %rdx,-0x78(%rbp)
  movl   $0x0,-0x14(%rbp)
  movl   $0x1,-0x18(%rbp)
  jmp    L12
L18:
  mov    -0x18(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x18(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movsd  0x28(%rbp),%xmm5
  movsd  0x20(%rbp),%xmm4
  movsd  0x18(%rbp),%xmm3
  movsd  -0x40(%rbp),%xmm2
  movsd  -0x38(%rbp),%xmm1
  push   0x38(%rbp)
  push   0x30(%rbp)
  movapd %xmm5,%xmm7
  movapd %xmm4,%xmm6
  movapd %xmm3,%xmm5
  movsd  0x10(%rbp),%xmm4
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <istanpt@plt>
  add    $0x10,%rsp
  mov    %eax,-0xc(%rbp)
  cmpl   $0x72,-0xc(%rbp)
  jne    L104
  addl   $0x1,-0x14(%rbp)
  mov    -0x18(%rbp),%eax
  mov    %eax,-0x10(%rbp)
L104:
  addl   $0x1,-0x18(%rbp)
L12:
  cmpl   $0x3,-0x18(%rbp)
  jle    L18
  cmpl   $0x1,-0x14(%rbp)
  je     L43
  mov    -0x78(%rbp),%rax
  movl   $0xffffff93,(%rax)
  movsd  D5(%rip),%xmm0
  jmp    L71
L43:
  cmpl   $0x3,-0x10(%rbp)
  je     L93
  cmpl   $0x3,-0x10(%rbp)
  jg     L88
  cmpl   $0x1,-0x10(%rbp)
  je     L60
  cmpl   $0x2,-0x10(%rbp)
  je     L14
  jmp    L88
L60:
  mov    -0x28(%rbp),%rax
  lea    0x8(%rax),%rdx
  mov    -0x28(%rbp),%rax
  movsd  0x18(%rax),%xmm0
  movsd  %xmm0,(%rdx)
  mov    -0x30(%rbp),%rax
  lea    0x8(%rax),%rdx
  mov    -0x30(%rbp),%rax
  movsd  0x18(%rax),%xmm0
  movsd  %xmm0,(%rdx)
  jmp    L88
L14:
  mov    -0x28(%rbp),%rax
  lea    0x10(%rax),%rdx
  mov    -0x28(%rbp),%rax
  movsd  0x18(%rax),%xmm0
  movsd  %xmm0,(%rdx)
  mov    -0x30(%rbp),%rax
  lea    0x10(%rax),%rdx
  mov    -0x30(%rbp),%rax
  movsd  0x18(%rax),%xmm0
  movsd  %xmm0,(%rdx)
  jmp    L88
L93:
  nop
L88:
  mov    -0x78(%rbp),%rdx
  movsd  -0x70(%rbp),%xmm6
  movsd  -0x68(%rbp),%xmm5
  movsd  -0x60(%rbp),%xmm4
  movsd  -0x58(%rbp),%xmm3
  movsd  -0x50(%rbp),%xmm2
  movsd  -0x48(%rbp),%xmm1
  movsd  -0x40(%rbp),%xmm0
  mov    -0x38(%rbp),%rsi
  mov    -0x30(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  push   0x38(%rbp)
  push   0x30(%rbp)
  push   0x28(%rbp)
  push   0x20(%rbp)
  push   0x18(%rbp)
  push   0x10(%rbp)
  movapd %xmm6,%xmm7
  movapd %xmm5,%xmm6
  movapd %xmm4,%xmm5
  movapd %xmm3,%xmm4
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rsi,%xmm0
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <twointpts@plt>
  add    $0x30,%rsp
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x78(%rbp),%rax
  movl   $0x6c,(%rax)
  movsd  -0x8(%rbp),%xmm0
L71:
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_tag: D5
type: byte[8]

tool: {"D5": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xbf]}

assistant: ```c
double threeintpts(double xint[], double yint[], double A1, double B1, double PHI_1, double A2, double B2, double H2_TR, double K2_TR, double PHI_2, double AA, double BB, double CC, double DD, double EE, double FF, int *rtnCode) {
  int i, tanpts, tanindex, fnRtn;
  double OverlapArea;
  tanpts = 0;
  for (i = 1; i <= 3; i++) {
    fnRtn = istanpt(xint[i], yint[i], A1, B1, AA, BB, CC, DD, EE, FF);
    if (fnRtn == 114) {
      tanpts++;
      tanindex = i;
    }
  }
  if (tanpts != 1) {
    (*rtnCode) = -109;
    return -1.0;
  }
  switch (tanindex) {
  case 1:
    xint[1] = xint[3];
    yint[1] = yint[3];
    break;
  case 2:
    xint[2] = xint[3];
    yint[2] = yint[3];
    break;
  case 3:
    break;
  }
  OverlapArea = twointpts(xint, yint, A1, B1, PHI_1, A2, B2, H2_TR, K2_TR, PHI_2, AA, BB, CC, DD, EE, FF, rtnCode);
  (*rtnCode) = 108;
  return OverlapArea;
}
```