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

```asm
<quicksort>:
  endbr64
  push   %r15
  movslq %esi,%rax
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x88,%rsp
  mov    %eax,0x54(%rsp)
  cmp    %eax,%edi
  jge    L312
  lea    (%rdx,%rax,4),%rax
  mov    %edi,%r8d
  mov    %rdx,%r9
  mov    %rax,0x8(%rsp)
L128:
  mov    0x8(%rsp),%rax
  lea    -0x1(%r8),%r10d
  movslq %r8d,%rdi
  mov    0x54(%rsp),%ecx
  mov    %r10d,%r11d
  movss  (%rax),%xmm1
  lea    (%r9,%rdi,4),%rax
L448:
  movss  (%rax),%xmm0
  lea    0x1(%r11),%esi
  comiss %xmm0,%xmm1
  ja     L444
  movslq %ecx,%rdx
  lea    -0x4(%r9,%rdx,4),%rdx
L387:
  mov    %rdx,%rbx
  movss  (%rdx),%xmm2
  sub    $0x4,%rdx
  sub    $0x1,%ecx
  comiss %xmm1,%xmm2
  ja     L387
  cmp    %ecx,%esi
  jge    L111
  movss  %xmm2,(%rax)
  movss  %xmm0,(%rbx)
L444:
  add    $0x4,%rax
  mov    %esi,%r11d
  jmp    L448
L357:
  mov    0x58(%rsp),%r8d
  add    $0x2,%r8d
  cmp    0x54(%rsp),%r8d
  jl     L128
L312:
  add    $0x88,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L111:
  mov    %rbx,0x10(%rsp)
  mov    0x8(%rsp),%rbx
  mov    %ecx,0x1c(%rsp)
  movss  (%rbx),%xmm1
  mov    %r11d,0x58(%rsp)
  movss  %xmm1,(%rax)
  movss  %xmm0,(%rbx)
  cmp    %r8d,%ecx
  jle    L357
L279:
  mov    0x10(%rsp),%rax
  mov    0x1c(%rsp),%ecx
  mov    %r10d,%r11d
  movss  (%rax),%xmm1
  lea    (%r9,%rdi,4),%rax
L125:
  movss  (%rax),%xmm0
  lea    0x1(%r11),%esi
  comiss %xmm0,%xmm1
  ja     L485
  movslq %ecx,%rdx
  lea    -0x4(%r9,%rdx,4),%rdx
L597:
  mov    %rdx,%rbx
  movss  (%rdx),%xmm2
  sub    $0x4,%rdx
  sub    $0x1,%ecx
  comiss %xmm1,%xmm2
  ja     L597
  cmp    %ecx,%esi
  jge    L569
  movss  %xmm2,(%rax)
  movss  %xmm0,(%rbx)
L485:
  add    $0x4,%rax
  mov    %esi,%r11d
  jmp    L125
L569:
  mov    %rbx,0x20(%rsp)
  mov    0x10(%rsp),%rbx
  mov    %r11d,0x5c(%rsp)
  movss  (%rbx),%xmm1
  mov    %ecx,0x28(%rsp)
  movss  %xmm1,(%rax)
  movss  %xmm0,(%rbx)
  cmp    %r8d,%ecx
  jle    L51
L66:
  mov    0x20(%rsp),%rax
  mov    0x28(%rsp),%ecx
  mov    %r10d,%r11d
  movss  (%rax),%xmm1
  lea    (%r9,%rdi,4),%rax
L232:
  movss  (%rax),%xmm0
  lea    0x1(%r11),%esi
  comiss %xmm0,%xmm1
  ja     L394
  movslq %ecx,%rdx
  lea    -0x4(%r9,%rdx,4),%rdx
L132:
  mov    %rdx,%rbx
  movss  (%rdx),%xmm2
  sub    $0x4,%rdx
  sub    $0x1,%ecx
  comiss %xmm1,%xmm2
  ja     L132
  cmp    %ecx,%esi
  jge    L253
  movss  %xmm2,(%rax)
  movss  %xmm0,(%rbx)
L394:
  add    $0x4,%rax
  mov    %esi,%r11d
  jmp    L232
L51:
  mov    0x5c(%rsp),%eax
  lea    0x2(%rax),%r8d
  cmp    %r8d,0x1c(%rsp)
  jle    L357
  lea    0x1(%rax),%r10d
  movslq %r8d,%rdi
  jmp    L279
L253:
  mov    0x20(%rsp),%rsi
  mov    %r11d,0x60(%rsp)
  mov    %ecx,0x2c(%rsp)
  movss  (%rsi),%xmm1
  mov    %rbx,0x30(%rsp)
  movss  %xmm1,(%rax)
  movss  %xmm0,(%rsi)
  cmp    %r8d,%ecx
  jle    L203
  mov    %r10d,%r11d
L580:
  mov    0x30(%rsp),%rax
  mov    0x2c(%rsp),%ecx
  mov    %r11d,%r10d
  movss  (%rax),%xmm1
  lea    (%r9,%rdi,4),%rax
L196:
  movss  (%rax),%xmm0
  lea    0x1(%r10),%esi
  comiss %xmm0,%xmm1
  ja     L212
  movslq %ecx,%rdx
  lea    -0x4(%r9,%rdx,4),%rdx
L223:
  mov    %rdx,%rbx
  movss  (%rdx),%xmm2
  sub    $0x4,%rdx
  sub    $0x1,%ecx
  comiss %xmm1,%xmm2
  ja     L223
  cmp    %ecx,%esi
  jge    L281
  movss  %xmm2,(%rax)
  movss  %xmm0,(%rbx)
L212:
  add    $0x4,%rax
  mov    %esi,%r10d
  jmp    L196
L281:
  mov    %rbx,0x38(%rsp)
  mov    0x30(%rsp),%rbx
  mov    %r10d,0x64(%rsp)
  movss  (%rbx),%xmm1
  mov    %ecx,0x40(%rsp)
  movss  %xmm1,(%rax)
  movss  %xmm0,(%rbx)
  cmp    %r8d,%ecx
  jle    L14
  mov    %r9,%r10
  mov    %r8d,%r9d
L489:
  mov    0x38(%rsp),%rax
  mov    0x40(%rsp),%ecx
  mov    %r11d,%r8d
  movss  (%rax),%xmm1
  lea    (%r10,%rdi,4),%rax
L349:
  movss  (%rax),%xmm0
  lea    0x1(%r8),%esi
  comiss %xmm0,%xmm1
  ja     L193
  movslq %ecx,%rdx
  lea    -0x4(%r10,%rdx,4),%rdx
L30:
  mov    %rdx,%rbx
  movss  (%rdx),%xmm2
  sub    $0x4,%rdx
  sub    $0x1,%ecx
  comiss %xmm1,%xmm2
  ja     L30
  cmp    %ecx,%esi
  jge    L290
  movss  %xmm2,(%rax)
  movss  %xmm0,(%rbx)
L193:
  add    $0x4,%rax
  mov    %esi,%r8d
  jmp    L349
L290:
  mov    0x38(%rsp),%rsi
  mov    %r8d,0x68(%rsp)
  mov    %ecx,0x44(%rsp)
  movss  (%rsi),%xmm1
  mov    %rbx,0x48(%rsp)
  movss  %xmm1,(%rax)
  movss  %xmm0,(%rsi)
  cmp    %ecx,%r9d
  jge    L353
  mov    %rdi,%rdx
  mov    %r10,%r13
  mov    %r9d,%edi
L531:
  mov    0x48(%rsp),%rax
  mov    0x44(%rsp),%esi
  mov    %r11d,%r8d
  movss  (%rax),%xmm1
  lea    0x0(%r13,%rdx,4),%rax
L82:
  movss  (%rax),%xmm0
  lea    0x1(%r8),%ecx
  comiss %xmm0,%xmm1
  ja     L271
  movslq %esi,%r9
  lea    -0x4(%r13,%r9,4),%r9
  nopl   0x0(%rax,%rax,1)
L510:
  mov    %r9,%r15
  movss  (%r9),%xmm2
  sub    $0x4,%r9
  sub    $0x1,%esi
  comiss %xmm1,%xmm2
  ja     L510
  cmp    %esi,%ecx
  jge    L21
  movss  %xmm2,(%rax)
  movss  %xmm0,(%r15)
L271:
  add    $0x4,%rax
  mov    %ecx,%r8d
  jmp    L82
L21:
  mov    0x48(%rsp),%rbx
  mov    %esi,0x50(%rsp)
  movss  (%rbx),%xmm1
  movss  %xmm1,(%rax)
  movss  %xmm0,(%rbx)
  cmp    %esi,%edi
  jge    L273
  mov    %r8d,0x6c(%rsp)
  mov    %r15,%rcx
L136:
  movss  (%rcx),%xmm2
  mov    0x50(%rsp),%ebx
  mov    %r11d,%r8d
  lea    0x0(%r13,%rdx,4),%rax
  nop
L97:
  movss  (%rax),%xmm0
  lea    0x1(%r8),%r9d
  comiss %xmm0,%xmm2
  ja     L12
  movslq %ebx,%rsi
  lea    -0x4(%r13,%rsi,4),%rsi
  nopl   (%rax)
L83:
  mov    %rsi,%r15
  movss  (%rsi),%xmm1
  sub    $0x4,%rsi
  sub    $0x1,%ebx
  comiss %xmm2,%xmm1
  ja     L83
  cmp    %ebx,%r9d
  jge    L546
  movss  %xmm1,(%rax)
  movss  %xmm0,(%r15)
L12:
  add    $0x4,%rax
  mov    %r9d,%r8d
  jmp    L97
L546:
  movss  (%rcx),%xmm1
  movss  %xmm1,(%rax)
  movss  %xmm0,(%rcx)
  cmp    %ebx,%edi
  jge    L208
  mov    %r13,%r9
  mov    %ebx,%r13d
L404:
  movss  (%r15),%xmm1
  mov    %r11d,%ebx
  lea    (%r9,%rdx,4),%rsi
  mov    %r13d,%ebp
  nopw   0x0(%rax,%rax,1)
L408:
  movss  (%rsi),%xmm2
  lea    0x1(%rbx),%r10d
  comiss %xmm2,%xmm1
  ja     L282
  movslq %ebp,%rax
  lea    -0x4(%r9,%rax,4),%rax
  nopl   (%rax)
L374:
  mov    %rax,%r14
  movss  (%rax),%xmm0
  sub    $0x4,%rax
  sub    $0x1,%ebp
  comiss %xmm1,%xmm0
  ja     L374
  cmp    %ebp,%r10d
  jge    L496
  movss  %xmm0,(%rsi)
  movss  %xmm2,(%r14)
L282:
  add    $0x4,%rsi
  mov    %r10d,%ebx
  jmp    L408
L443:
  mov    %r9,%r13
L208:
  lea    0x2(%r8),%edi
  cmp    %edi,0x50(%rsp)
  jle    L526
  lea    0x1(%r8),%r11d
  movslq %edi,%rdx
  jmp    L136
L526:
  mov    0x6c(%rsp),%r8d
L273:
  lea    0x2(%r8),%edi
  cmp    %edi,0x44(%rsp)
  jle    L363
  lea    0x1(%r8),%r11d
  movslq %edi,%rdx
  jmp    L531
  nopw   0x0(%rax,%rax,1)
L496:
  movss  (%r15),%xmm0
  movss  %xmm0,(%rsi)
  movss  %xmm2,(%r15)
  cmp    %ebp,%edi
  jge    L243
  mov    %rcx,0x70(%rsp)
  mov    %r14,%rax
  mov    %r9,%r12
  mov    %ebx,%r14d
  mov    %r8d,0x78(%rsp)
  mov    %rax,%rbx
  mov    %r13d,0x7c(%rsp)
L155:
  movss  (%rbx),%xmm2
  mov    %r11d,%r13d
  lea    (%r12,%rdx,4),%rdx
  mov    %ebp,%esi
  xchg   %ax,%ax
L226:
  movss  (%rdx),%xmm0
  lea    0x1(%r13),%ecx
  comiss %xmm0,%xmm2
  ja     L455
  movslq %esi,%rax
  lea    -0x4(%r12,%rax,4),%rax
  nopl   (%rax)
L214:
  mov    %rax,%r8
  movss  (%rax),%xmm1
  sub    $0x4,%rax
  sub    $0x1,%esi
  comiss %xmm2,%xmm1
  ja     L214
  cmp    %esi,%ecx
  jge    L2
  movss  %xmm1,(%rdx)
  movss  %xmm0,(%r8)
L455:
  add    $0x4,%rdx
  mov    %ecx,%r13d
  jmp    L226
  nopl   0x0(%rax)
L2:
  movss  (%rbx),%xmm1
  movss  %xmm1,(%rdx)
  mov    %r12,%rdx
  movss  %xmm0,(%rbx)
  call   <quicksort>
  lea    0x2(%r13),%edi
  cmp    %edi,%ebp
  jle    L547
  lea    0x1(%r13),%r11d
  movslq %edi,%rdx
  jmp    L155
  nopl   (%rax)
L547:
  mov    0x70(%rsp),%rcx
  mov    0x78(%rsp),%r8d
  mov    %r14d,%ebx
  mov    %r12,%r9
  mov    0x7c(%rsp),%r13d
L243:
  lea    0x2(%rbx),%edi
  cmp    %edi,%r13d
  jle    L443
  lea    0x1(%rbx),%r11d
  movslq %edi,%rdx
  jmp    L404
L363:
  mov    %r13,%r10
L353:
  mov    0x68(%rsp),%eax
  lea    0x2(%rax),%r9d
  cmp    %r9d,0x40(%rsp)
  jle    L47
  lea    0x1(%rax),%r11d
  movslq %r9d,%rdi
  jmp    L489
L47:
  mov    %r10,%r9
L14:
  mov    0x64(%rsp),%eax
  lea    0x2(%rax),%r8d
  cmp    %r8d,0x2c(%rsp)
  jle    L203
  lea    0x1(%rax),%r11d
  movslq %r8d,%rdi
  jmp    L580
L203:
  mov    0x60(%rsp),%eax
  lea    0x2(%rax),%r8d
  cmp    %r8d,0x28(%rsp)
  jle    L51
  lea    0x1(%rax),%r10d
  movslq %r8d,%rdi
  jmp    L66
```

assistant: ```c
void quicksort(int m, int n, float *a) {
  register int i, j;
  float v, x;
  if (n <= m)
    return;
  i = m - 1;
  j = n;
  v = a[n];
  do {
    do
      i = i + 1;
    while (a[i] < v);
    do
      j = j - 1;
    while (a[j] > v);
    if (i < j) {
      x = a[i];
      a[i] = a[j];
      a[j] = x;
    } else {
      x = a[i];
      a[i] = a[n];
      a[n] = x;
    }
  } while (i < j);
  quicksort(m, j, a);
  quicksort(i + 1, n, a);
}
```