user: What would the C source look like for the assembly code provided here:

```asm
<quicksort>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xe0,%rsp
  mov    %edi,-0xc4(%rbp)
  mov    %rsi,-0xd0(%rbp)
  mov    %rdx,-0xd8(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0xb0(%rbp)
  mov    -0xc4(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0xac(%rbp)
  movl   $0xffffffff,-0xa8(%rbp)
  jmp    L0
L58:
  mov    -0xac(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0xa0(%rbp)
  mov    -0xb0(%rbp),%eax
  mov    %eax,-0xb8(%rbp)
  mov    -0xac(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0xb4(%rbp)
  jmp    L114
L37:
  addl   $0x1,-0xb8(%rbp)
L114:
  mov    -0xb8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movsd  -0xa0(%rbp),%xmm0
  comisd %xmm1,%xmm0
  ja     L37
  jmp    L27
L80:
  subl   $0x1,-0xb4(%rbp)
L27:
  mov    -0xb4(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  comisd -0xa0(%rbp),%xmm0
  jb     L115
  mov    -0xb4(%rbp),%eax
  cmp    -0xb0(%rbp),%eax
  jg     L80
L115:
  mov    -0xb8(%rbp),%eax
  cmp    -0xb4(%rbp),%eax
  jge    L61
  mov    -0xb8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x98(%rbp)
  mov    -0xb4(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xd0(%rbp),%rax
  add    %rax,%rdx
  mov    -0xb8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0xd0(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xb4(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x98(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xb8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xd8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0xa4(%rbp)
  mov    -0xb4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xd8(%rbp),%rax
  add    %rdx,%rax
  mov    -0xb8(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0xd8(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0xb4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xd8(%rbp),%rax
  add    %rax,%rdx
  mov    -0xa4(%rbp),%eax
  mov    %eax,(%rdx)
  jmp    L114
L61:
  nop
  mov    -0xb8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x98(%rbp)
  mov    -0xac(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xd0(%rbp),%rax
  add    %rax,%rdx
  mov    -0xb8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0xd0(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xac(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x98(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xb8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xd8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0xa4(%rbp)
  mov    -0xac(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xd8(%rbp),%rax
  add    %rdx,%rax
  mov    -0xb8(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0xd8(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0xac(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xd8(%rbp),%rax
  add    %rax,%rdx
  mov    -0xa4(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0xb8(%rbp),%eax
  sub    -0xb0(%rbp),%eax
  mov    %eax,%edx
  mov    -0xac(%rbp),%eax
  sub    -0xb8(%rbp),%eax
  cmp    %eax,%edx
  jle    L15
  addl   $0x1,-0xa8(%rbp)
  mov    -0xa8(%rbp),%eax
  cltq
  mov    -0xb0(%rbp),%edx
  mov    %edx,-0x90(%rbp,%rax,4)
  addl   $0x1,-0xa8(%rbp)
  mov    -0xb8(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0xa8(%rbp),%eax
  cltq
  mov    %edx,-0x90(%rbp,%rax,4)
  mov    -0xb8(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0xb0(%rbp)
  jmp    L78
L15:
  addl   $0x1,-0xa8(%rbp)
  mov    -0xb8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    -0xa8(%rbp),%eax
  cltq
  mov    %edx,-0x90(%rbp,%rax,4)
  addl   $0x1,-0xa8(%rbp)
  mov    -0xa8(%rbp),%eax
  cltq
  mov    -0xac(%rbp),%edx
  mov    %edx,-0x90(%rbp,%rax,4)
  mov    -0xb8(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0xac(%rbp)
L78:
  cmpl   $0x1f,-0xa8(%rbp)
  setle  %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
L0:
  mov    -0xac(%rbp),%eax
  cmp    -0xb0(%rbp),%eax
  jg     L58
  cmpl   $0xffffffff,-0xa8(%rbp)
  je     L11
  mov    -0xa8(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,-0xa8(%rbp)
  cltq
  mov    -0x90(%rbp,%rax,4),%eax
  mov    %eax,-0xac(%rbp)
  mov    -0xa8(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,-0xa8(%rbp)
  cltq
  mov    -0x90(%rbp,%rax,4),%eax
  mov    %eax,-0xb0(%rbp)
  jmp    L0
L11:
  nop
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L39
  call   <__stack_chk_fail@plt>
L39:
  leave
  ret
```

assistant: ```c
void quicksort(int n, double arr[], int idx[]) {
  double v, td;
  int i, j, l, r, ti, tos, stack[32];
  l = 0;
  r = n - 1;
  tos = -1;
  for (;;) {
    while (r > l) {
      v = arr[r];
      i = l;
      j = r - 1;
      for (;;) {
        while (arr[i] < v)
          i++;
        while (arr[j] >= v && j > l)
          j--;
        if (i >= j)
          break;
        td = arr[i];
        arr[i] = arr[j];
        arr[j] = td;
        ti = idx[i];
        idx[i] = idx[j];
        idx[j] = ti;
      }
      td = arr[i];
      arr[i] = arr[r];
      arr[r] = td;
      ti = idx[i];
      idx[i] = idx[r];
      idx[r] = ti;
      if (i - l > r - i) {
        stack[++tos] = l;
        stack[++tos] = i - 1;
        l = i + 1;
      } else {
        stack[++tos] = i + 1;
        stack[++tos] = r;
        r = i - 1;
      }
      assert(tos < 32);
    }
    if (tos == -1)
      break;
    r = stack[tos--];
    l = stack[tos--];
  }
}
```