user: Converte this assembly snippet into its equivalent C code:

```asm
<tetcircumcenter>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x100,%rsp
  mov    %rdi,-0xd8(%rbp)
  mov    %rsi,-0xe0(%rbp)
  mov    %rdx,-0xe8(%rbp)
  mov    %rcx,-0xf0(%rbp)
  mov    %r8,-0xf8(%rbp)
  mov    %r9,-0x100(%rbp)
  mov    -0xe0(%rbp),%rax
  movsd  (%rax),%xmm0
  mov    -0xd8(%rbp),%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0xc8(%rbp)
  mov    -0xe0(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  mov    -0xd8(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0xc0(%rbp)
  mov    -0xe0(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  mov    -0xd8(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0xb8(%rbp)
  mov    -0xe8(%rbp),%rax
  movsd  (%rax),%xmm0
  mov    -0xd8(%rbp),%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0xb0(%rbp)
  mov    -0xe8(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  mov    -0xd8(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0xa8(%rbp)
  mov    -0xe8(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  mov    -0xd8(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0xa0(%rbp)
  mov    -0xf0(%rbp),%rax
  movsd  (%rax),%xmm0
  mov    -0xd8(%rbp),%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x98(%rbp)
  mov    -0xf0(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  mov    -0xd8(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x90(%rbp)
  mov    -0xf0(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  mov    -0xd8(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x88(%rbp)
  movsd  -0xc8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  %xmm0,%xmm1
  movsd  -0xc0(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0xb8(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  -0xb0(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  %xmm0,%xmm1
  movsd  -0xa8(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0xa0(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0x98(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  %xmm0,%xmm1
  movsd  -0x90(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0x88(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  -0xa8(%rbp),%xmm0
  mulsd  -0x88(%rbp),%xmm0
  movsd  -0x90(%rbp),%xmm1
  mulsd  -0xa0(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  -0xa0(%rbp),%xmm0
  mulsd  -0x98(%rbp),%xmm0
  movsd  -0x88(%rbp),%xmm1
  mulsd  -0xb0(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0xb0(%rbp),%xmm0
  mulsd  -0x90(%rbp),%xmm0
  movsd  -0x98(%rbp),%xmm1
  mulsd  -0xa8(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movsd  -0x90(%rbp),%xmm0
  mulsd  -0xb8(%rbp),%xmm0
  movsd  -0xc0(%rbp),%xmm1
  mulsd  -0x88(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  -0x88(%rbp),%xmm0
  mulsd  -0xc8(%rbp),%xmm0
  movsd  -0xb8(%rbp),%xmm1
  mulsd  -0x98(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x98(%rbp),%xmm0
  mulsd  -0xc0(%rbp),%xmm0
  movsd  -0xc8(%rbp),%xmm1
  mulsd  -0x90(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0xc0(%rbp),%xmm0
  mulsd  -0xa0(%rbp),%xmm0
  movsd  -0xa8(%rbp),%xmm1
  mulsd  -0xb8(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  -0xb8(%rbp),%xmm0
  mulsd  -0xb0(%rbp),%xmm0
  movsd  -0xa0(%rbp),%xmm1
  mulsd  -0xc8(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0xc8(%rbp),%xmm0
  mulsd  -0xa8(%rbp),%xmm0
  movsd  -0xb0(%rbp),%xmm1
  mulsd  -0xc0(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0xd8(%rbp),%rcx
  mov    -0xf0(%rbp),%rdx
  mov    -0xe8(%rbp),%rsi
  mov    -0xe0(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <orient3d@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x100(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    -0x100(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D8(%rip),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x80(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x68(%rbp),%xmm1
  movsd  -0x78(%rbp),%xmm0
  mulsd  -0x50(%rbp),%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0x70(%rbp),%xmm0
  mulsd  -0x38(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  -0x20(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x80(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x60(%rbp),%xmm1
  movsd  -0x78(%rbp),%xmm0
  mulsd  -0x48(%rbp),%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0x70(%rbp),%xmm0
  mulsd  -0x30(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  -0x20(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x80(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x58(%rbp),%xmm1
  movsd  -0x78(%rbp),%xmm0
  mulsd  -0x40(%rbp),%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0x70(%rbp),%xmm0
  mulsd  -0x28(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  -0x20(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0xf8(%rbp),%rax
  movsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xf8(%rbp),%rax
  add    $0x8,%rax
  movsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xf8(%rbp),%rax
  add    $0x10,%rax
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  nop
  leave
  ret
```

tool_calls: name: read_data
arguments: data_tag: D8
type_infered: f64

tool: D8: 0.5

assistant: ```c
void tetcircumcenter(a, b, c, d, circumcenter, cond) double a[3];
double b[3];
double c[3];
double d[3];
double circumcenter[3];
double *cond;
{
  double xba, yba, zba, xca, yca, zca, xda, yda, zda;
  double balength, calength, dalength;
  double xcrosscd, ycrosscd, zcrosscd;
  double xcrossdb, ycrossdb, zcrossdb;
  double xcrossbc, ycrossbc, zcrossbc;
  double denominator;
  double xcirca, ycirca, zcirca;
  xba = b[0] - a[0];
  yba = b[1] - a[1];
  zba = b[2] - a[2];
  xca = c[0] - a[0];
  yca = c[1] - a[1];
  zca = c[2] - a[2];
  xda = d[0] - a[0];
  yda = d[1] - a[1];
  zda = d[2] - a[2];
  balength = xba * xba + yba * yba + zba * zba;
  calength = xca * xca + yca * yca + zca * zca;
  dalength = xda * xda + yda * yda + zda * zda;
  xcrosscd = yca * zda - yda * zca;
  ycrosscd = zca * xda - zda * xca;
  zcrosscd = xca * yda - xda * yca;
  xcrossdb = yda * zba - yba * zda;
  ycrossdb = zda * xba - zba * xda;
  zcrossdb = xda * yba - xba * yda;
  xcrossbc = yba * zca - yca * zba;
  ycrossbc = zba * xca - zca * xba;
  zcrossbc = xba * yca - xca * yba;
  *cond = orient3d(b, c, d, a);
  denominator = 0.5 / (*cond);
  xcirca = (balength * xcrosscd + calength * xcrossdb + dalength * xcrossbc) * denominator;
  ycirca = (balength * ycrosscd + calength * ycrossdb + dalength * ycrossbc) * denominator;
  zcirca = (balength * zcrosscd + calength * zcrossdb + dalength * zcrossbc) * denominator;
  circumcenter[0] = xcirca;
  circumcenter[1] = ycirca;
  circumcenter[2] = zcirca;
}
```