user: 下面的汇编指令对应的C源代码是什么：

```asm
<quad_roots>:
  endbr64
  movapd %xmm1,%xmm9
  movapd %xmm2,%xmm5
  movq   D46(%rip),%xmm6
  movsd  D75(%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     L74
  movsd  D21(%rip),%xmm7
  comisd %xmm10,%xmm7
  jbe    L236
L74:
  mulsd  %xmm8,%xmm5
  comisd %xmm9,%xmm5
  jbe    L189
L226:
  xor    %eax,%eax
  ret
  nopl   0x0(%rax)
L189:
  xorpd  D69(%rip),%xmm2
  divsd  %xmm1,%xmm2
  comisd %xmm3,%xmm2
  movsd  %xmm2,(%rdi)
  jbe    L226
  comisd %xmm2,%xmm4
  jbe    L226
  mov    $0x1,%eax
  ret
  nopw   0x0(%rax,%rax,1)
L236:
  divsd  %xmm0,%xmm1
  pxor   %xmm7,%xmm7
  divsd  %xmm0,%xmm2
  movsd  D15(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  subsd  %xmm2,%xmm0
  comisd %xmm0,%xmm7
  ja     L226
  sub    $0x38,%rsp
  ucomisd %xmm0,%xmm7
  ja     L55
  sqrtsd %xmm0,%xmm0
L158:
  comisd %xmm7,%xmm1
  movsd  D59(%rip),%xmm5
  mulsd  %xmm1,%xmm5
  jbe    L48
  movapd %xmm5,%xmm1
  subsd  %xmm0,%xmm1
L163:
  movapd %xmm1,%xmm0
  movsd  %xmm1,(%rdi)
  andpd  %xmm6,%xmm0
  comisd %xmm0,%xmm8
  ja     L14
  divsd  %xmm1,%xmm2
  comisd %xmm1,%xmm3
  movapd %xmm2,%xmm0
  movsd  %xmm2,0x8(%rdi)
  unpcklpd %xmm1,%xmm0
  jae    L57
  comisd %xmm4,%xmm1
  jae    L57
  comisd %xmm2,%xmm3
  jae    L157
  comisd %xmm4,%xmm2
  jae    L157
  comisd %xmm2,%xmm1
  jbe    L21
  movq   %xmm1,%rax
  movups %xmm0,(%rdi)
  movapd %xmm2,%xmm1
  movq   %rax,%xmm2
L21:
  subsd  %xmm2,%xmm1
  mov    $0x2,%eax
  andpd  %xmm6,%xmm1
  comisd %xmm1,%xmm8
  jbe    L225
  nopl   (%rax)
L157:
  mov    $0x1,%eax
  jmp    L225
  nopw   0x0(%rax,%rax,1)
L57:
  comisd %xmm3,%xmm2
  movsd  %xmm2,(%rdi)
  ja     L224
L238:
  xor    %eax,%eax
L225:
  add    $0x38,%rsp
  ret
  nopl   0x0(%rax)
L48:
  movapd %xmm0,%xmm1
  addsd  %xmm5,%xmm1
  jmp    L163
  nopl   (%rax)
L224:
  comisd %xmm2,%xmm4
  ja     L157
  jmp    L238
L14:
  comisd %xmm3,%xmm1
  jbe    L238
  comisd %xmm1,%xmm4
  ja     L157
  jmp    L238
L55:
  mov    %rdi,0x28(%rsp)
  movsd  %xmm4,0x20(%rsp)
  movsd  %xmm3,0x18(%rsp)
  movsd  %xmm2,0x10(%rsp)
  movsd  %xmm1,0x8(%rsp)
  call   <sqrt@plt>
  mov    D75(%rip),%rax
  mov    0x28(%rsp),%rdi
  pxor   %xmm7,%xmm7
  movq   D46(%rip),%xmm6
  movsd  0x20(%rsp),%xmm4
  movsd  0x18(%rsp),%xmm3
  movsd  0x10(%rsp),%xmm2
  movq   %rax,%xmm8
  movsd  0x8(%rsp),%xmm1
  jmp    L158
```

tool_calls: name: unpack_data
arguments: tag: D46
type_guessed: qword
name: unpack_data
arguments: tag: D75
type_guessed: byte[8]
name: unpack_data
arguments: tag: D21
type_guessed: byte[8]
name: unpack_data
arguments: tag: D69
type_guessed: f32[4]
name: unpack_data
arguments: tag: D15
type_guessed: f64
name: unpack_data
arguments: tag: D59
type_guessed: f32[2]

tool: D46: 9223372036854775807

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

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

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

tool: D15: 0.25

tool: {"D59": [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;
}
```