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

```asm
<quad_roots>:
  endbr64
  movapd %xmm1,%xmm9
  movapd %xmm2,%xmm5
  movq   D44(%rip),%xmm6
  movsd  D20(%rip),%xmm8
  movapd %xmm0,%xmm10
  andpd  %xmm6,%xmm9
  andpd  %xmm6,%xmm5
  andpd  %xmm6,%xmm10
  movapd %xmm9,%xmm7
  maxsd  %xmm5,%xmm7
  mulsd  %xmm8,%xmm7
  comisd %xmm10,%xmm7
  ja     L238
  movsd  D64(%rip),%xmm7
  comisd %xmm10,%xmm7
  jbe    L74
L238:
  mulsd  %xmm8,%xmm5
  comisd %xmm9,%xmm5
  jbe    L37
L62:
  xor    %eax,%eax
  ret
  nopl   0x0(%rax)
L37:
  xorpd  D27(%rip),%xmm2
  divsd  %xmm1,%xmm2
  comisd %xmm3,%xmm2
  movsd  %xmm2,(%rdi)
  jbe    L62
  comisd %xmm2,%xmm4
  jbe    L62
  mov    $0x1,%eax
  ret
  nopw   0x0(%rax,%rax,1)
L74:
  divsd  %xmm0,%xmm1
  pxor   %xmm7,%xmm7
  divsd  %xmm0,%xmm2
  movsd  D30(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  subsd  %xmm2,%xmm0
  comisd %xmm0,%xmm7
  ja     L62
  sub    $0x38,%rsp
  ucomisd %xmm0,%xmm7
  ja     L54
  sqrtsd %xmm0,%xmm0
L217:
  comisd %xmm7,%xmm1
  movsd  D45(%rip),%xmm5
  mulsd  %xmm1,%xmm5
  jbe    L32
  movapd %xmm5,%xmm1
  subsd  %xmm0,%xmm1
L187:
  movapd %xmm1,%xmm0
  movsd  %xmm1,(%rdi)
  andpd  %xmm6,%xmm0
  comisd %xmm0,%xmm8
  ja     L21
  divsd  %xmm1,%xmm2
  comisd %xmm1,%xmm3
  movsd  %xmm2,0x8(%rdi)
  jae    L86
  comisd %xmm4,%xmm1
  jae    L86
  comisd %xmm2,%xmm3
  jae    L8
  comisd %xmm4,%xmm2
  jae    L8
  comisd %xmm2,%xmm1
  jbe    L184
  movq   %xmm1,%rax
  movsd  %xmm1,0x8(%rdi)
  movapd %xmm2,%xmm1
  movsd  %xmm2,(%rdi)
  movq   %rax,%xmm2
L184:
  subsd  %xmm2,%xmm1
  mov    $0x2,%eax
  andpd  %xmm6,%xmm1
  comisd %xmm1,%xmm8
  jbe    L118
  nopl   0x0(%rax,%rax,1)
L8:
  mov    $0x1,%eax
  jmp    L118
  nopw   0x0(%rax,%rax,1)
L86:
  comisd %xmm3,%xmm2
  movsd  %xmm2,(%rdi)
  ja     L108
L172:
  xor    %eax,%eax
L118:
  add    $0x38,%rsp
  ret
  nopl   0x0(%rax)
L32:
  movapd %xmm0,%xmm1
  addsd  %xmm5,%xmm1
  jmp    L187
  nopl   (%rax)
L108:
  comisd %xmm2,%xmm4
  ja     L8
  jmp    L172
L21:
  comisd %xmm3,%xmm1
  jbe    L172
  comisd %xmm1,%xmm4
  ja     L8
  jmp    L172
L54:
  mov    %rdi,0x28(%rsp)
  movsd  %xmm4,0x20(%rsp)
  movsd  %xmm3,0x18(%rsp)
  movsd  %xmm2,0x10(%rsp)
  movsd  %xmm1,0x8(%rsp)
  call   <sqrt@plt>
  mov    D20(%rip),%rax
  mov    0x28(%rsp),%rdi
  pxor   %xmm7,%xmm7
  movq   D44(%rip),%xmm6
  movsd  0x20(%rsp),%xmm4
  movsd  0x18(%rsp),%xmm3
  movsd  0x10(%rsp),%xmm2
  movq   %rax,%xmm8
  movsd  0x8(%rsp),%xmm1
  jmp    L217
```

tool_calls: name: retrieve_data
arguments: tag: D44
type: qword
name: retrieve_data
arguments: tag: D20
type: byte[8]
name: retrieve_data
arguments: tag: D64
type: byte[8]
name: retrieve_data
arguments: tag: D27
type: f32[4]
name: retrieve_data
arguments: tag: D30
type: f64
name: retrieve_data
arguments: tag: D45
type: f32[2]

tool: D44: 9223372036854775807

tool: {"D20": [0x3a,0x8c,0x30,0xe2,0x8e,0x79,0x45,0x3e]}

tool: {"D64": [0xbc,0x89,0xd8,0x97,0xb2,0xd2,0x9c,0x3c]}

tool: {"D27": [0.0,-0.0,0.0,0.0]}

tool: D30: 0.25

tool: {"D45": [0.0,-1.75]}

assistant: ```c
int quad_roots(double a, double b, double c, double t0, double t1, double *t) {
  if (fabs(a) < (fabs(b) > fabs(c) ? fabs(b) : fabs(c)) * 1.0e-8 || fabs(a) < 1.0e-16) {
    if (fabs(b) < fabs(c) * 1.0e-8)
      return 0;
    t[0] = -c / b;
    return t[0] > t0 && t[0] < t1;
  }
  double p = b / a;
  double q = c / a;
  double det = 0.25 * p - q;
  if (det < 0)
    return 0;
  det = sqrt(det);
  if (p > 0.0)
    t[0] = -0.5 * p - det;
  else
    t[0] = -0.5 * p + det;
  if (fabs(t[0]) < 1.0e-8)
    return t[0] > t0 && t[0] < t1;
  t[1] = q / t[0];
  if (t[0] <= t0 || t[0] >= t1) {
    t[0] = t[1];
    return t[0] > t0 && t[0] < t1;
  }
  if (t[1] <= t0 || t[1] >= t1)
    return 1;
  if (t[0] > t[1]) {
    double tmp = t[1];
    t[1] = t[0];
    t[0] = tmp;
  }
  return fabs(t[0] - t[1]) < 1.0e-8 ? 1 : 2;
}
```