user: What is the c source code of the assembly code below?

```asm
<qd_div_qd_dd>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xc0,%rsp
  mov    %rdi,-0xa8(%rbp)
  mov    %rsi,-0xb0(%rbp)
  mov    %rdx,-0xb8(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0xb0(%rbp),%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  mov    -0xb0(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x68(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x58(%rbp)
  mov    -0xa8(%rbp),%rax
  movsd  (%rax),%xmm0
  mov    -0xb0(%rbp),%rax
  movsd  (%rax),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x98(%rbp)
  mov    -0x98(%rbp),%rdx
  lea    -0x50(%rbp),%rcx
  lea    -0x70(%rbp),%rax
  mov    %rcx,%rsi
  movq   %rdx,%xmm0
  mov    %rax,%rdi
  call   <qd_mul_d@plt>
  lea    -0x30(%rbp),%rdx
  lea    -0x50(%rbp),%rcx
  mov    -0xa8(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <qd_sub@plt>
  movsd  -0x30(%rbp),%xmm0
  mov    -0xb0(%rbp),%rax
  movsd  (%rax),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x90(%rbp)
  mov    -0x90(%rbp),%rdx
  lea    -0x50(%rbp),%rcx
  lea    -0x70(%rbp),%rax
  mov    %rcx,%rsi
  movq   %rdx,%xmm0
  mov    %rax,%rdi
  call   <qd_mul_d@plt>
  lea    -0x30(%rbp),%rdx
  lea    -0x50(%rbp),%rcx
  lea    -0x30(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <qd_sub@plt>
  movsd  -0x30(%rbp),%xmm0
  mov    -0xb0(%rbp),%rax
  movsd  (%rax),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x88(%rbp)
  mov    -0x88(%rbp),%rdx
  lea    -0x50(%rbp),%rcx
  lea    -0x70(%rbp),%rax
  mov    %rcx,%rsi
  movq   %rdx,%xmm0
  mov    %rax,%rdi
  call   <qd_mul_d@plt>
  lea    -0x30(%rbp),%rdx
  lea    -0x50(%rbp),%rcx
  lea    -0x30(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <qd_sub@plt>
  movsd  -0x30(%rbp),%xmm0
  mov    -0xb0(%rbp),%rax
  movsd  (%rax),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x80(%rbp)
  mov    -0x80(%rbp),%rdx
  lea    -0x50(%rbp),%rcx
  lea    -0x70(%rbp),%rax
  mov    %rcx,%rsi
  movq   %rdx,%xmm0
  mov    %rax,%rdi
  call   <qd_mul_d@plt>
  lea    -0x30(%rbp),%rdx
  lea    -0x50(%rbp),%rcx
  lea    -0x30(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <qd_sub@plt>
  movsd  -0x30(%rbp),%xmm0
  mov    -0xb0(%rbp),%rax
  movsd  (%rax),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x78(%rbp)
  lea    -0x78(%rbp),%rdi
  lea    -0x80(%rbp),%rcx
  lea    -0x88(%rbp),%rdx
  lea    -0x90(%rbp),%rsi
  lea    -0x98(%rbp),%rax
  mov    %rdi,%r8
  mov    %rax,%rdi
  call   <qd_renorm5@plt>
  movsd  -0x98(%rbp),%xmm0
  mov    -0xb8(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    -0xb8(%rbp),%rax
  add    $0x8,%rax
  movsd  -0x90(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xb8(%rbp),%rax
  add    $0x10,%rax
  movsd  -0x88(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xb8(%rbp),%rax
  add    $0x18,%rax
  movsd  -0x80(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L2
  call   <__stack_chk_fail@plt>
L2:
  leave
  ret
```

assistant: ```c
void qd_div_qd_dd(const double *a, const double *b, double *c) {
  double q0, q1, q2, q3, q4;
  double qd_b[4];
  double acc[4];
  double r[4];
  qd_b[0] = b[0];
  qd_b[1] = b[1];
  qd_b[2] = 0.0;
  qd_b[3] = 0.0;
  q0 = a[0] / b[0];
  qd_mul_d(qd_b, q0, acc);
  qd_sub(a, acc, r);
  q1 = r[0] / b[0];
  qd_mul_d(qd_b, q1, acc);
  qd_sub(r, acc, r);
  q2 = r[0] / b[0];
  qd_mul_d(qd_b, q2, acc);
  qd_sub(r, acc, r);
  q3 = r[0] / b[0];
  qd_mul_d(qd_b, q3, acc);
  qd_sub(r, acc, r);
  q4 = r[0] / b[0];
  qd_renorm5(&q0, &q1, &q2, &q3, &q4);
  c[0] = q0;
  c[1] = q1;
  c[2] = q2;
  c[3] = q3;
}
```