user: Converte this assembly snippet into its equivalent C code:

```asm
<my_qs>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %rdi,-0x58(%rbp)
  mov    %esi,-0x5c(%rbp)
  mov    %edx,-0x60(%rbp)
  mov    %ecx,-0x64(%rbp)
  mov    %r8,-0x70(%rbp)
  mov    -0x60(%rbp),%eax
  add    $0x1,%eax
  cmp    %eax,-0x64(%rbp)
  jle    L294
  mov    -0x60(%rbp),%eax
  add    $0x2,%eax
  cmp    %eax,-0x64(%rbp)
  jne    L236
  mov    -0x70(%rbp),%rdx
  mov    -0x60(%rbp),%ecx
  mov    -0x58(%rbp),%rax
  mov    %ecx,%esi
  mov    %rax,%rdi
  call   <my_qs_2@plt>
  jmp    L294
L236:
  mov    -0x60(%rbp),%eax
  add    $0x3,%eax
  cmp    %eax,-0x64(%rbp)
  jne    L187
  mov    -0x60(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  mov    -0x60(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  mov    -0x60(%rbp),%eax
  cltq
  add    $0x2,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x18(%rbp),%xmm0
  comisd -0x10(%rbp),%xmm0
  ja     L176
  movsd  -0x18(%rbp),%xmm0
  comisd -0x8(%rbp),%xmm0
  jbe    L142
L176:
  movsd  -0x8(%rbp),%xmm0
  comisd -0x10(%rbp),%xmm0
  jbe    L199
  mov    -0x60(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x60(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    -0x60(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x70(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x60(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rax,%rdx
  mov    -0x24(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x60(%rbp),%eax
  lea    0x1(%rax),%ecx
  mov    -0x70(%rbp),%rdx
  mov    -0x58(%rbp),%rax
  mov    %ecx,%esi
  mov    %rax,%rdi
  call   <my_qs_2@plt>
  jmp    L294
L199:
  mov    -0x60(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x60(%rbp),%eax
  cltq
  add    $0x2,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    -0x60(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x70(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x60(%rbp),%eax
  cltq
  add    $0x2,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rax,%rdx
  mov    -0x28(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x60(%rbp),%eax
  lea    0x1(%rax),%ecx
  mov    -0x70(%rbp),%rdx
  mov    -0x58(%rbp),%rax
  mov    %ecx,%esi
  mov    %rax,%rdi
  call   <my_qs_2@plt>
  jmp    L294
L142:
  mov    -0x60(%rbp),%eax
  lea    0x1(%rax),%ecx
  mov    -0x70(%rbp),%rdx
  mov    -0x58(%rbp),%rax
  mov    %ecx,%esi
  mov    %rax,%rdi
  call   <my_qs_2@plt>
  jmp    L294
L187:
  mov    -0x64(%rbp),%eax
  sub    -0x60(%rbp),%eax
  mov    %eax,%edi
  call   <int_random@plt>
  mov    -0x60(%rbp),%edx
  add    %edx,%eax
  mov    %eax,-0x44(%rbp)
  mov    -0x44(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  mov    -0x60(%rbp),%eax
  mov    %eax,-0x50(%rbp)
  mov    -0x60(%rbp),%eax
  mov    %eax,-0x4c(%rbp)
  mov    -0x64(%rbp),%eax
  mov    %eax,-0x48(%rbp)
  jmp    L13
L197:
  mov    -0x50(%rbp),%eax
  cmp    -0x4c(%rbp),%eax
  jge    L123
  mov    -0x50(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x40(%rbp)
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    -0x50(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x70(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rax,%rdx
  mov    -0x40(%rbp),%eax
  mov    %eax,(%rdx)
L123:
  addl   $0x1,-0x50(%rbp)
  addl   $0x1,-0x4c(%rbp)
L196:
  mov    -0x4c(%rbp),%eax
  cmp    -0x48(%rbp),%eax
  jge    L311
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movsd  -0x20(%rbp),%xmm0
  comisd %xmm1,%xmm0
  ja     L197
  jmp    L311
L230:
  mov    -0x50(%rbp),%eax
  cmp    -0x4c(%rbp),%eax
  jge    L246
  mov    -0x50(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x3c(%rbp)
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    -0x50(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x70(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rax,%rdx
  mov    -0x3c(%rbp),%eax
  mov    %eax,(%rdx)
L246:
  addl   $0x1,-0x4c(%rbp)
L311:
  mov    -0x4c(%rbp),%eax
  cmp    -0x48(%rbp),%eax
  jge    L351
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  ucomisd -0x20(%rbp),%xmm0
  jp     L351
  ucomisd -0x20(%rbp),%xmm0
  je     L230
L351:
  mov    -0x4c(%rbp),%eax
  cmp    -0x48(%rbp),%eax
  jge    L95
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movsd  -0x20(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jae    L196
  jmp    L95
L92:
  subl   $0x1,-0x48(%rbp)
L95:
  mov    -0x4c(%rbp),%eax
  cmp    -0x48(%rbp),%eax
  jge    L107
  mov    -0x48(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  comisd -0x20(%rbp),%xmm0
  ja     L92
L107:
  mov    -0x4c(%rbp),%eax
  cmp    -0x48(%rbp),%eax
  jge    L303
  mov    -0x48(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  ucomisd -0x20(%rbp),%xmm0
  jp     L303
  ucomisd -0x20(%rbp),%xmm0
  jne    L303
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x38(%rbp)
  mov    -0x48(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    -0x4c(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x70(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x48(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x70(%rbp),%rax
  add    %rax,%rdx
  mov    -0x38(%rbp),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x4c(%rbp)
  mov    -0x4c(%rbp),%eax
  cmp    -0x48(%rbp),%eax
  jge    L13
  subl   $0x1,-0x48(%rbp)
  jmp    L13
L303:
  mov    -0x4c(%rbp),%eax
  cmp    -0x48(%rbp),%eax
  jge    L13
  mov    -0x50(%rbp),%eax
  cmp    -0x4c(%rbp),%eax
  jne    L290
  mov    -0x50(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x48(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    -0x50(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x70(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x48(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x70(%rbp),%rax
  add    %rax,%rdx
  mov    -0x2c(%rbp),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x50(%rbp)
  addl   $0x1,-0x4c(%rbp)
  mov    -0x4c(%rbp),%eax
  cmp    -0x48(%rbp),%eax
  jge    L13
  subl   $0x1,-0x48(%rbp)
  jmp    L13
L290:
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x48(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    -0x4c(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x70(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x48(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x70(%rbp),%rax
  add    %rax,%rdx
  mov    -0x34(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x50(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x30(%rbp)
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    -0x50(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x70(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x4c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rax,%rdx
  mov    -0x30(%rbp),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x50(%rbp)
  addl   $0x1,-0x4c(%rbp)
  mov    -0x4c(%rbp),%eax
  cmp    -0x48(%rbp),%eax
  jge    L13
  subl   $0x1,-0x48(%rbp)
L13:
  mov    -0x4c(%rbp),%eax
  cmp    -0x48(%rbp),%eax
  jl     L351
  mov    -0x70(%rbp),%rdi
  mov    -0x50(%rbp),%ecx
  mov    -0x60(%rbp),%edx
  mov    -0x5c(%rbp),%esi
  mov    -0x58(%rbp),%rax
  mov    %rdi,%r8
  mov    %rax,%rdi
  call   <my_qs>
  mov    -0x70(%rbp),%rdi
  mov    -0x64(%rbp),%ecx
  mov    -0x48(%rbp),%edx
  mov    -0x5c(%rbp),%esi
  mov    -0x58(%rbp),%rax
  mov    %rdi,%r8
  mov    %rax,%rdi
  call   <my_qs>
  jmp    L294
L294:
  nop
  leave
  ret
```

assistant: ```c
void my_qs(double *farr, int size, int start, int end, int *indices) {
  if (end <= start + 1) {
  } else if (end == start + 2) {
    my_qs_2(farr, start, indices);
  } else if (end == start + 3) {
    double x0 = farr[indices[start + 0]];
    double x1 = farr[indices[start + 1]];
    double x2 = farr[indices[start + 2]];
    if (x0 > x1 || x0 > x2) {
      if (x1 < x2) {
        {
          int temp = indices[start];
          indices[start] = indices[start + 1];
          indices[start + 1] = temp;
        };
        my_qs_2(farr, start + 1, indices);
      } else {
        {
          int temp = indices[start];
          indices[start] = indices[start + 2];
          indices[start + 2] = temp;
        };
        my_qs_2(farr, start + 1, indices);
      }
    } else
      my_qs_2(farr, start + 1, indices);
  } else {
    int pivot_index = start + int_random(end - start);
    double pivot_value = farr[indices[pivot_index]];
    int i = start;
    int j = start;
    int k = end;
    while (j < k) {
      while (j < k && farr[indices[j]] <= pivot_value) {
        while (j < k && farr[indices[j]] < pivot_value) {
          if (i < j) {
            int temp = indices[i];
            indices[i] = indices[j];
            indices[j] = temp;
          };
          i += 1;
          j += 1;
        }
        while (j < k && farr[indices[j]] == pivot_value) {
          if (i < j) {
            int temp = indices[i];
            indices[i] = indices[j];
            indices[j] = temp;
          };
          j += 1;
        }
      }
      while (j < k && farr[indices[k - 1]] > pivot_value)
        k -= 1;
      if (j < k && farr[indices[k - 1]] == pivot_value) {
        {
          int temp = indices[j];
          indices[j] = indices[k - 1];
          indices[k - 1] = temp;
        };
        j += 1;
        if (j < k)
          k -= 1;
      } else if (j < k) {
        if (i == j) {
          {
            int temp = indices[i];
            indices[i] = indices[k - 1];
            indices[k - 1] = temp;
          };
          i += 1;
          j += 1;
          if (j < k)
            k -= 1;
        } else {
          {
            int temp = indices[j];
            indices[j] = indices[k - 1];
            indices[k - 1] = temp;
          };
          {
            int temp = indices[i];
            indices[i] = indices[j];
            indices[j] = temp;
          };
          i += 1;
          j += 1;
          if (j < k)
            k -= 1;
        }
      }
    }
    my_qs(farr, size, start, i, indices);
    my_qs(farr, size, k, end, indices);
  }
}
```