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

```asm
<R_qsort_I>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x170,%rsp
  mov    %rdi,-0x158(%rbp)
  mov    %rsi,-0x160(%rbp)
  mov    %edx,-0x164(%rbp)
  mov    %ecx,-0x168(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movsd  D2(%rip),%xmm0
  movsd  %xmm0,-0x120(%rbp)
  subq   $0x8,-0x158(%rbp)
  subq   $0x4,-0x160(%rbp)
  mov    -0x164(%rbp),%eax
  mov    %eax,-0x134(%rbp)
  movl   $0x1,-0x13c(%rbp)
L174:
  mov    -0x164(%rbp),%eax
  cmp    -0x168(%rbp),%eax
  jge    L157
  movsd  D29(%rip),%xmm0
  comisd -0x120(%rbp),%xmm0
  jbe    L7
  movsd  -0x120(%rbp),%xmm1
  movsd  D32(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x120(%rbp)
  jmp    L70
L7:
  movsd  -0x120(%rbp),%xmm0
  movsd  D30(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x120(%rbp)
  jmp    L70
L39:
  nop
L70:
  mov    -0x164(%rbp),%eax
  mov    %eax,-0x144(%rbp)
  mov    -0x168(%rbp),%eax
  sub    -0x164(%rbp),%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  -0x120(%rbp),%xmm0
  cvttsd2si %xmm0,%edx
  mov    -0x164(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x130(%rbp)
  mov    -0x130(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x160(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x138(%rbp)
  mov    -0x130(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x158(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x128(%rbp)
  mov    -0x164(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x158(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  comisd -0x128(%rbp),%xmm0
  jbe    L126
  mov    -0x164(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x160(%rbp),%rax
  add    %rdx,%rax
  mov    -0x130(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x160(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x164(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x160(%rbp),%rax
  add    %rax,%rdx
  mov    -0x138(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x130(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x160(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x138(%rbp)
  mov    -0x164(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x158(%rbp),%rax
  add    %rax,%rdx
  mov    -0x130(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x158(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x164(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x158(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x128(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x130(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x158(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x128(%rbp)
L126:
  mov    -0x168(%rbp),%eax
  mov    %eax,-0x140(%rbp)
  mov    -0x168(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x158(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movsd  -0x128(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jbe    L166
  mov    -0x168(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x160(%rbp),%rax
  add    %rdx,%rax
  mov    -0x130(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x160(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x168(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x160(%rbp),%rax
  add    %rax,%rdx
  mov    -0x138(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x130(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x160(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x138(%rbp)
  mov    -0x168(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x158(%rbp),%rax
  add    %rax,%rdx
  mov    -0x130(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x158(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x168(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x158(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x128(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x130(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x158(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x128(%rbp)
  mov    -0x164(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x158(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  comisd -0x128(%rbp),%xmm0
  jbe    L166
  mov    -0x164(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x160(%rbp),%rax
  add    %rdx,%rax
  mov    -0x130(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x160(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x164(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x160(%rbp),%rax
  add    %rax,%rdx
  mov    -0x138(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x130(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x160(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x138(%rbp)
  mov    -0x164(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x158(%rbp),%rax
  add    %rax,%rdx
  mov    -0x130(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x158(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x164(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x158(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x128(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x130(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x158(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x128(%rbp)
L166:
  subl   $0x1,-0x140(%rbp)
  jmp    L49
L225:
  subl   $0x1,-0x140(%rbp)
L49:
  mov    -0x140(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x158(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  comisd -0x128(%rbp),%xmm0
  ja     L225
  mov    -0x140(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x160(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x12c(%rbp)
  mov    -0x140(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x158(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x118(%rbp)
  addl   $0x1,-0x144(%rbp)
  jmp    L86
L141:
  addl   $0x1,-0x144(%rbp)
L86:
  mov    -0x144(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x158(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movsd  -0x128(%rbp),%xmm0
  comisd %xmm1,%xmm0
  ja     L141
  mov    -0x144(%rbp),%eax
  cmp    -0x140(%rbp),%eax
  jg     L158
  mov    -0x144(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x160(%rbp),%rax
  add    %rdx,%rax
  mov    -0x140(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x160(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x144(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x160(%rbp),%rax
  add    %rax,%rdx
  mov    -0x12c(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x144(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x158(%rbp),%rax
  add    %rax,%rdx
  mov    -0x140(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x158(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x144(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x158(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x118(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  jmp    L166
L158:
  nop
  addl   $0x1,-0x13c(%rbp)
  mov    -0x140(%rbp),%eax
  sub    -0x164(%rbp),%eax
  mov    %eax,%edx
  mov    -0x168(%rbp),%eax
  sub    -0x144(%rbp),%eax
  cmp    %eax,%edx
  jg     L168
  mov    -0x13c(%rbp),%eax
  cltq
  mov    -0x144(%rbp),%edx
  mov    %edx,-0x110(%rbp,%rax,4)
  mov    -0x13c(%rbp),%eax
  cltq
  mov    -0x168(%rbp),%edx
  mov    %edx,-0x90(%rbp,%rax,4)
  mov    -0x140(%rbp),%eax
  mov    %eax,-0x168(%rbp)
  jmp    L160
L168:
  mov    -0x13c(%rbp),%eax
  cltq
  mov    -0x164(%rbp),%edx
  mov    %edx,-0x110(%rbp,%rax,4)
  mov    -0x13c(%rbp),%eax
  cltq
  mov    -0x140(%rbp),%edx
  mov    %edx,-0x90(%rbp,%rax,4)
  mov    -0x144(%rbp),%eax
  mov    %eax,-0x164(%rbp)
  jmp    L160
L157:
  nop
  jmp    L189
L104:
  nop
L189:
  cmpl   $0x1,-0x13c(%rbp)
  je     L76
  mov    -0x13c(%rbp),%eax
  cltq
  mov    -0x110(%rbp,%rax,4),%eax
  mov    %eax,-0x164(%rbp)
  mov    -0x13c(%rbp),%eax
  cltq
  mov    -0x90(%rbp,%rax,4),%eax
  mov    %eax,-0x168(%rbp)
  subl   $0x1,-0x13c(%rbp)
L160:
  mov    -0x168(%rbp),%eax
  sub    -0x164(%rbp),%eax
  cmp    $0xa,%eax
  jg     L39
  mov    -0x164(%rbp),%eax
  cmp    -0x134(%rbp),%eax
  jne    L198
  jmp    L174
L198:
  subl   $0x1,-0x164(%rbp)
L117:
  addl   $0x1,-0x164(%rbp)
  mov    -0x164(%rbp),%eax
  cmp    -0x168(%rbp),%eax
  je     L104
  mov    -0x164(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x160(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x138(%rbp)
  mov    -0x164(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x158(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x128(%rbp)
  mov    -0x164(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x158(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movsd  -0x128(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jae    L117
  mov    -0x164(%rbp),%eax
  mov    %eax,-0x144(%rbp)
L90:
  mov    -0x144(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x160(%rbp),%rax
  add    %rdx,%rax
  mov    -0x144(%rbp),%edx
  movslq %edx,%rdx
  add    $0x1,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x160(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x144(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x158(%rbp),%rax
  add    %rax,%rdx
  mov    -0x144(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rcx
  mov    -0x158(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  subl   $0x1,-0x144(%rbp)
  mov    -0x144(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x158(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  comisd -0x128(%rbp),%xmm0
  ja     L90
  mov    -0x144(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x160(%rbp),%rax
  add    %rax,%rdx
  mov    -0x138(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x144(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x158(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x128(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  jmp    L117
L76:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L120
  call   <__stack_chk_fail@plt>
L120:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D2
data_type: f64
name: disassemble_data
arguments: data_tag: D29
data_type: f64
name: disassemble_data
arguments: data_tag: D32
data_type: f64
name: disassemble_data
arguments: data_tag: D30
data_type: f64

tool: D2: 0.375

tool: D29: 0.5898437

tool: D32: 0.0390625

tool: D30: 0.21875

assistant: ```c
void R_qsort_I(double *v, int *I, int i, int j) {
  int il[31], iu[31];
  double vt, vtt;
  double R = 0.375;
  int ii, ij, k, l, m;
  int it, tt;
  --v;
  --I;
  ii = i;
  m = 1;
L10:
  if (i < j) {
    if (R < 0.5898437)
      R += 0.0390625;
    else
      R -= 0.21875;
  L20:
    k = i;
    ij = i + (int)((j - i) * R);
    it = I[ij];
    vt = v[ij];
    if (v[i] > vt) {
      I[ij] = I[i];
      I[i] = it;
      it = I[ij];
      v[ij] = v[i];
      v[i] = vt;
      vt = v[ij];
    }
    l = j;
    if (v[j] < vt) {
      I[ij] = I[j];
      I[j] = it;
      it = I[ij];
      v[ij] = v[j];
      v[j] = vt;
      vt = v[ij];
      if (v[i] > vt) {
        I[ij] = I[i];
        I[i] = it;
        it = I[ij];
        v[ij] = v[i];
        v[i] = vt;
        vt = v[ij];
      }
    }
    for (;;) {
      l--;
      for (; v[l] > vt; l--)
        ;
      tt = I[l];
      vtt = v[l];
      k = k + 1;
      for (; v[k] < vt; k++)
        ;
      if (k > l)
        break;
      I[l] = I[k];
      I[k] = tt;
      v[l] = v[k];
      v[k] = vtt;
    }
    m++;
    if (l - i <= j - k) {
      il[m] = k;
      iu[m] = j;
      j = l;
    } else {
      il[m] = i;
      iu[m] = l;
      i = k;
    }
  } else {
  L80:
    if (m == 1)
      return;
    i = il[m];
    j = iu[m];
    m--;
  }
  if (j - i > 10)
    goto L20;
  if (i == ii)
    goto L10;
  --i;
L100:
  do {
    ++i;
    if (i == j) {
      goto L80;
    }
    it = I[i + 1];
    vt = v[i + 1];
  } while (v[i] <= vt);
  k = i;
  do {
    I[k + 1] = I[k];
    v[k + 1] = v[k];
    --k;
  } while (vt < v[k]);
  I[k + 1] = it;
  v[k + 1] = vt;
  goto L100;
}
```