user: Demonstrate the C code that generates the assembly output below:

```asm
<quadratic_roots>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    -0x38(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  comisd D101(%rip),%xmm0
  jbe    L25
  mov    -0x38(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  movsd  D54(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L25
  mov    -0x40(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <linear_roots@plt>
  jmp    L76
L25:
  mov    -0x38(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  mov    -0x38(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0x38(%rbp),%rax
  movsd  (%rax),%xmm0
  mov    -0x38(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x28(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  -0x20(%rbp),%xmm2
  movsd  D115(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x18(%rbp),%xmm0
  comisd D101(%rip),%xmm0
  jbe    L77
  movsd  D54(%rip),%xmm0
  comisd -0x18(%rbp),%xmm0
  jbe    L77
  movsd  -0x28(%rbp),%xmm0
  movq   D13(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  D43(%rip),%xmm1
  divsd  %xmm1,%xmm0
  mov    -0x40(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    $0x1,%eax
  jmp    L76
L77:
  pxor   %xmm0,%xmm0
  comisd -0x18(%rbp),%xmm0
  jbe    L108
  mov    $0x0,%eax
  jmp    L76
L108:
  mov    -0x18(%rbp),%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x10(%rbp)
  movsd  -0x28(%rbp),%xmm0
  comisd D101(%rip),%xmm0
  jbe    L33
  movsd  D54(%rip),%xmm0
  comisd -0x28(%rbp),%xmm0
  jbe    L33
  movsd  -0x10(%rbp),%xmm0
  movsd  D43(%rip),%xmm1
  divsd  %xmm1,%xmm0
  mov    -0x40(%rbp),%rax
  movsd  %xmm0,(%rax)
  movsd  -0x10(%rbp),%xmm0
  movq   D13(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  mov    -0x40(%rbp),%rax
  add    $0x8,%rax
  movsd  D43(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  jmp    L109
L33:
  mov    -0x28(%rbp),%rax
  movq   %rax,%xmm0
  call   <sgn@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  mulsd  -0x10(%rbp),%xmm0
  addsd  -0x28(%rbp),%xmm0
  movq   D13(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  D43(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x40(%rbp),%rax
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x40(%rbp),%rax
  add    $0x8,%rax
  movsd  -0x20(%rbp),%xmm0
  divsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
L109:
  mov    $0x2,%eax
L76:
  leave
  ret
```

tool_calls: name: read_data
arguments: label: D101
datatype: byte[16]
name: read_data
arguments: label: D54
datatype: byte[8]
name: read_data
arguments: label: D115
datatype: byte[8]
name: read_data
arguments: label: D13
datatype: byte[8]
name: read_data
arguments: label: D43
datatype: f64

tool: {"D101": [0xa0,0xc2,0xeb,0xfe,0x4b,0x48,0xb4,0xb9,0xa0,0xc2,0xeb,0xfe,0x4b,0x48,0xb4,0x39]}

tool: {"D54": [0xa0,0xc2,0xeb,0xfe,0x4b,0x48,0xb4,0x39]}

tool: {"D115": [0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x40]}

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

tool: D43: 2

assistant: ```c
extern int quadratic_roots(double *a, double *r) {
  double B, C, D;
  if ((((a[2]) > -1e-30) && ((a[2]) < 1e-30)))
    return linear_roots(a, r);
  B = a[1] / a[2];
  C = a[0] / a[2];
  D = B * B - 4 * C;
  if ((((D) > -1e-30) && ((D) < 1e-30))) {
    r[0] = -B / 2;
    return 1;
  } else if (D < 0)
    return 0;
  double sD = sqrt(D);
  if ((((B) > -1e-30) && ((B) < 1e-30))) {
    r[0] = sD / 2;
    r[1] = -sD / 2;
  } else {
    double t = -(B + sgn(B) * sD) / 2;
    r[0] = t;
    r[1] = C / t;
  }
  return 2;
}
```