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

```asm
<rroots3>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xa0,%rsp
  mov    %rdi,-0x88(%rbp)
  mov    %rsi,-0x90(%rbp)
  mov    -0x88(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  mov    -0x88(%rbp),%rax
  movsd  (%rax),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x68(%rbp)
  mov    -0x88(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  mov    -0x88(%rbp),%rax
  movsd  (%rax),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0x68(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movsd  -0x68(%rbp),%xmm0
  movsd  D142(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  -0x60(%rbp),%xmm1
  movsd  D142(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  subsd  -0x58(%rbp),%xmm0
  movsd  D133(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x58(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  mulsd  -0x68(%rbp),%xmm0
  movsd  D72(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  -0x68(%rbp),%xmm1
  mulsd  -0x60(%rbp),%xmm1
  movsd  D142(%rip),%xmm3
  movapd %xmm1,%xmm2
  divsd  %xmm3,%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  mov    -0x88(%rbp),%rax
  add    $0x18,%rax
  movsd  (%rax),%xmm0
  mov    -0x88(%rbp),%rax
  movsd  (%rax),%xmm2
  divsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  movsd  D10(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x40(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  %xmm0,%xmm1
  movsd  -0x48(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  mulsd  -0x48(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  -0x38(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jbe    L39
  mov    -0x38(%rbp),%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  subsd  -0x40(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x10(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jbe    L80
  movsd  D75(%rip),%xmm0
  mov    -0x10(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  movsd  -0x48(%rbp),%xmm0
  movapd %xmm0,%xmm1
  divsd  -0x8(%rbp),%xmm1
  movsd  -0x8(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  subsd  -0x50(%rbp),%xmm0
  mov    -0x90(%rbp),%rax
  movsd  %xmm0,(%rax)
  jmp    L25
L80:
  movsd  -0x10(%rbp),%xmm0
  movq   D135(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movsd  D75(%rip),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  movsd  -0x48(%rbp),%xmm0
  divsd  -0x8(%rbp),%xmm0
  subsd  -0x8(%rbp),%xmm0
  subsd  -0x50(%rbp),%xmm0
  mov    -0x90(%rbp),%rax
  movsd  %xmm0,(%rax)
L25:
  mov    $0x1,%eax
  jmp    L46
L39:
  movsd  -0x40(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jbe    L12
  movsd  D175(%rip),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  jmp    L21
L12:
  movsd  D50(%rip),%xmm0
  movsd  %xmm0,-0x78(%rbp)
L21:
  movsd  -0x48(%rbp),%xmm0
  movq   D135(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movsd  -0x78(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x30(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x30(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x30(%rbp),%xmm1
  movsd  -0x40(%rbp),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  -0x70(%rbp),%xmm0
  movsd  D175(%rip),%xmm1
  comisd %xmm1,%xmm0
  jbe    L44
  movsd  D175(%rip),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  jmp    L66
L44:
  movsd  D50(%rip),%xmm0
  comisd -0x70(%rbp),%xmm0
  jbe    L66
  movsd  D50(%rip),%xmm0
  movsd  %xmm0,-0x70(%rbp)
L66:
  mov    -0x70(%rbp),%rax
  movq   %rax,%xmm0
  call   <acos@plt>
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  D130(%rip),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x28(%rbp),%xmm0
  movq   D135(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  %xmm0,-0x98(%rbp)
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  mulsd  -0x98(%rbp),%xmm0
  subsd  -0x50(%rbp),%xmm0
  mov    -0x90(%rbp),%rax
  movsd  %xmm0,(%rax)
  movsd  -0x18(%rbp),%xmm0
  subsd  -0x20(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  mulsd  -0x28(%rbp),%xmm0
  mov    -0x90(%rbp),%rax
  add    $0x8,%rax
  subsd  -0x50(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x18(%rbp),%xmm0
  addsd  -0x20(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  mulsd  -0x28(%rbp),%xmm0
  mov    -0x90(%rbp),%rax
  add    $0x10,%rax
  subsd  -0x50(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    $0x3,%eax
L46:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D142
type_guessed: byte[8]
name: unpack_data
arguments: data_label: D133
type_guessed: byte[8]
name: unpack_data
arguments: data_label: D72
type_guessed: byte[8]
name: unpack_data
arguments: data_label: D10
type_guessed: byte[8]
name: unpack_data
arguments: data_label: D75
type_guessed: byte[8]
name: unpack_data
arguments: data_label: D135
type_guessed: byte[8]
name: unpack_data
arguments: data_label: D175
type_guessed: f64
name: unpack_data
arguments: data_label: D50
type_guessed: byte[8]
name: unpack_data
arguments: data_label: D130
type_guessed: byte[8]

tool: {"D142": [0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x40]}

tool: {"D133": [0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x40]}

tool: {"D72": [0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x40]}

tool: {"D10": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40]}

tool: {"D75": [0x55,0x55,0x55,0x55,0x55,0x55,0xd5,0x3f]}

tool: {"D135": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80]}

tool: D175: 1

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

tool: {"D130": [0x61,0x73,0x2d,0x38,0x52,0xc1,0xf0,0x3f]}

assistant: ```c
int rroots3(double *po, double *r) {
  double b, c, b2, bt, v, pit, e;
  double p, q, D, A, cosphi, phit, R, _2R;
  b = *(po + 1) / (*po);
  c = *(po + 2) / (*po);
  b2 = b * b;
  bt = b / 3;
  p = (3 * c - b2) / 9;
  q = ((2 * b2 * b) / 27 - b * c / 3 + (*(po + 3)) / (*po)) / 2;
  D = q * q + p * p * p;
  if (D > 0) {
    A = sqrt(D) - q;
    if (A > 0) {
      v = pow(A, 1.0 / 3);
      *r = v - p / v - bt;
    } else {
      v = pow(-A, 1.0 / 3);
      *r = p / v - v - bt;
    }
    return 1;
  } else {
    if (q > 0)
      e = 1;
    else
      e = -1;
    R = e * sqrt(-p);
    _2R = R * 2;
    cosphi = q / (R * R * R);
    if (cosphi > 1)
      cosphi = 1;
    else if (cosphi < -1)
      cosphi = -1;
    phit = acos(cosphi) / 3;
    pit = 3.14159265358979 / 3;
    r[0] = -_2R * cos(phit) - bt;
    r[1] = _2R * cos(pit - phit) - bt;
    r[2] = _2R * cos(pit + phit) - bt;
    return 3;
  }
}
```