user: Demonstrate the C code that generates the assembly output below:

```asm
<QuickSort>:
  endbr64
  push   %r15
  movslq %edx,%rax
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x88,%rsp
  mov    %eax,0x60(%rsp)
  cmp    %eax,%esi
  jge    L588
  lea    (%rdi,%rax,4),%rax
  mov    %rdi,%r10
  mov    %esi,%r11d
  mov    %rax,0x10(%rsp)
L240:
  mov    0x10(%rsp),%rax
  lea    -0x1(%r11),%r13d
  movslq %r11d,%r14
  mov    0x60(%rsp),%edi
  mov    %r13d,%ebx
  mov    (%rax),%esi
  lea    (%r10,%r14,4),%rax
L170:
  mov    (%rax),%ecx
  lea    0x1(%rbx),%r9d
  cmp    %esi,%ecx
  jl     L552
  movslq %edi,%rdx
  lea    -0x4(%r10,%rdx,4),%rdx
L617:
  mov    %rdx,%rbp
  mov    (%rdx),%r8d
  sub    $0x4,%rdx
  sub    $0x1,%edi
  cmp    %esi,%r8d
  jg     L617
  cmp    %edi,%r9d
  jge    L501
  mov    %r8d,(%rax)
  mov    %ecx,0x0(%rbp)
L552:
  add    $0x4,%rax
  mov    %r9d,%ebx
  jmp    L170
L254:
  mov    0x64(%rsp),%r11d
  add    $0x2,%r11d
  cmp    0x60(%rsp),%r11d
  jl     L240
L588:
  add    $0x88,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L501:
  mov    0x10(%rsp),%rsi
  mov    %rbp,0x18(%rsp)
  mov    %ebx,0x64(%rsp)
  mov    (%rsi),%edx
  mov    %edi,0x20(%rsp)
  mov    %edx,(%rax)
  mov    %ecx,(%rsi)
  cmp    %edi,%r11d
  jge    L254
L273:
  mov    0x18(%rsp),%rax
  mov    0x20(%rsp),%edi
  mov    %r13d,%ebx
  mov    (%rax),%esi
  lea    (%r10,%r14,4),%rax
L577:
  mov    (%rax),%ecx
  lea    0x1(%rbx),%r9d
  cmp    %ecx,%esi
  jg     L551
  movslq %edi,%rdx
  lea    -0x4(%r10,%rdx,4),%rdx
L25:
  mov    %rdx,%rbp
  mov    (%rdx),%r8d
  sub    $0x4,%rdx
  sub    $0x1,%edi
  cmp    %r8d,%esi
  jl     L25
  cmp    %edi,%r9d
  jge    L268
  mov    %r8d,(%rax)
  mov    %ecx,0x0(%rbp)
L551:
  add    $0x4,%rax
  mov    %r9d,%ebx
  jmp    L577
L268:
  mov    0x18(%rsp),%rsi
  mov    %ebx,0x68(%rsp)
  mov    %edi,0x24(%rsp)
  mov    (%rsi),%edx
  mov    %rbp,0x28(%rsp)
  mov    %edx,(%rax)
  mov    %ecx,(%rsi)
  cmp    %edi,%r11d
  jge    L188
L610:
  mov    0x28(%rsp),%rax
  mov    0x24(%rsp),%edi
  mov    %r13d,%ebx
  mov    (%rax),%esi
  lea    (%r10,%r14,4),%rax
L281:
  mov    (%rax),%ecx
  lea    0x1(%rbx),%r9d
  cmp    %ecx,%esi
  jg     L394
  movslq %edi,%rdx
  lea    -0x4(%r10,%rdx,4),%rdx
L9:
  mov    %rdx,%rbp
  mov    (%rdx),%r8d
  sub    $0x4,%rdx
  sub    $0x1,%edi
  cmp    %r8d,%esi
  jl     L9
  cmp    %edi,%r9d
  jge    L252
  mov    %r8d,(%rax)
  mov    %ecx,0x0(%rbp)
L394:
  add    $0x4,%rax
  mov    %r9d,%ebx
  jmp    L281
L188:
  mov    0x68(%rsp),%eax
  lea    0x2(%rax),%r11d
  cmp    %r11d,0x20(%rsp)
  jle    L254
  lea    0x1(%rax),%r13d
  movslq %r11d,%r14
  jmp    L273
L252:
  mov    %ebx,0x6c(%rsp)
  mov    0x28(%rsp),%rbx
  mov    %edi,0x38(%rsp)
  mov    (%rbx),%edx
  mov    %rbp,0x30(%rsp)
  mov    %edx,(%rax)
  mov    %ecx,(%rbx)
  cmp    %edi,%r11d
  jge    L389
L244:
  mov    0x30(%rsp),%rax
  mov    0x38(%rsp),%edi
  mov    %r13d,%ebx
  mov    (%rax),%esi
  lea    (%r10,%r14,4),%rax
L387:
  mov    (%rax),%ecx
  lea    0x1(%rbx),%r9d
  cmp    %ecx,%esi
  jg     L319
  movslq %edi,%rdx
  lea    -0x4(%r10,%rdx,4),%rdx
L51:
  mov    %rdx,%rbp
  mov    (%rdx),%r8d
  sub    $0x4,%rdx
  sub    $0x1,%edi
  cmp    %r8d,%esi
  jl     L51
  cmp    %edi,%r9d
  jge    L433
  mov    %r8d,(%rax)
  mov    %ecx,0x0(%rbp)
L319:
  add    $0x4,%rax
  mov    %r9d,%ebx
  jmp    L387
L389:
  mov    0x6c(%rsp),%eax
  lea    0x2(%rax),%r11d
  cmp    %r11d,0x24(%rsp)
  jle    L188
  lea    0x1(%rax),%r13d
  movslq %r11d,%r14
  jmp    L610
L433:
  mov    0x30(%rsp),%rsi
  mov    %ebx,0x70(%rsp)
  mov    %edi,0x3c(%rsp)
  mov    (%rsi),%edx
  mov    %rbp,0x40(%rsp)
  mov    %edx,(%rax)
  mov    %ecx,(%rsi)
  cmp    %edi,%r11d
  jge    L248
  mov    %r11d,%r8d
  mov    %r14,%r11
L524:
  mov    0x40(%rsp),%rax
  mov    0x3c(%rsp),%edi
  mov    %r13d,%ebp
  mov    (%rax),%esi
  lea    (%r10,%r11,4),%rax
L401:
  mov    (%rax),%ecx
  lea    0x1(%rbp),%ebx
  cmp    %ecx,%esi
  jg     L13
  movslq %edi,%rdx
  lea    -0x4(%r10,%rdx,4),%rdx
L22:
  mov    %rdx,%r12
  mov    (%rdx),%r9d
  sub    $0x4,%rdx
  sub    $0x1,%edi
  cmp    %r9d,%esi
  jl     L22
  cmp    %edi,%ebx
  jge    L360
  mov    %r9d,(%rax)
  mov    %ecx,(%r12)
L13:
  add    $0x4,%rax
  mov    %ebx,%ebp
  jmp    L401
L360:
  mov    0x40(%rsp),%rbx
  mov    %ebp,0x74(%rsp)
  mov    %edi,0x50(%rsp)
  mov    (%rbx),%edx
  mov    %r12,0x48(%rsp)
  mov    %edx,(%rax)
  mov    %ecx,(%rbx)
  cmp    %edi,%r8d
  jge    L424
L393:
  mov    0x48(%rsp),%rax
  mov    0x50(%rsp),%edi
  mov    %r13d,%r15d
  mov    (%rax),%esi
  lea    (%r10,%r11,4),%rax
L307:
  mov    (%rax),%edx
  lea    0x1(%r15),%ecx
  cmp    %edx,%esi
  jg     L174
  movslq %edi,%r9
  lea    -0x4(%r10,%r9,4),%r9
  nopl   0x0(%rax)
L292:
  mov    %r9,%rbp
  mov    (%r9),%ebx
  sub    $0x4,%r9
  sub    $0x1,%edi
  cmp    %ebx,%esi
  jl     L292
  cmp    %edi,%ecx
  jge    L450
  mov    %ebx,(%rax)
  mov    %edx,0x0(%rbp)
L174:
  add    $0x4,%rax
  mov    %ecx,%r15d
  jmp    L307
L450:
  mov    0x48(%rsp),%rsi
  mov    %edi,0x54(%rsp)
  mov    %rbp,0x58(%rsp)
  mov    (%rsi),%ecx
  mov    %ecx,(%rax)
  mov    %edx,(%rsi)
  cmp    %edi,%r8d
  jge    L600
  mov    %r15d,0x7c(%rsp)
  mov    %r10,%r14
  mov    %r13d,%ebx
L505:
  mov    0x58(%rsp),%rax
  mov    0x54(%rsp),%r10d
  mov    %ebx,%ebp
  lea    (%r14,%r11,4),%rdx
  mov    (%rax),%r9d
  xchg   %ax,%ax
L219:
  mov    (%rdx),%ecx
  lea    0x1(%rbp),%edi
  cmp    %ecx,%r9d
  jg     L124
  movslq %r10d,%rax
  lea    -0x4(%r14,%rax,4),%rax
  nopw   0x0(%rax,%rax,1)
L543:
  mov    %rax,%r12
  mov    (%rax),%esi
  sub    $0x4,%rax
  sub    $0x1,%r10d
  cmp    %esi,%r9d
  jl     L543
  cmp    %r10d,%edi
  jge    L618
  mov    %esi,(%rdx)
  mov    %ecx,(%r12)
L124:
  add    $0x4,%rdx
  mov    %edi,%ebp
  jmp    L219
L618:
  mov    0x58(%rsp),%rsi
  mov    %ebp,0x78(%rsp)
  mov    (%rsi),%eax
  mov    %eax,(%rdx)
  mov    %ecx,(%rsi)
  cmp    %r10d,%r8d
  jge    L399
  mov    %r10d,0xc(%rsp)
L90:
  mov    (%r12),%esi
  mov    0xc(%rsp),%ebp
  mov    %ebx,%r13d
  lea    (%r14,%r11,4),%rdx
  nopl   0x0(%rax)
L15:
  mov    (%rdx),%edi
  lea    0x1(%r13),%r9d
  cmp    %edi,%esi
  jg     L519
  movslq %ebp,%rax
  lea    -0x4(%r14,%rax,4),%rax
  nopw   0x0(%rax,%rax,1)
L516:
  mov    %rax,%r15
  mov    (%rax),%ecx
  sub    $0x4,%rax
  sub    $0x1,%ebp
  cmp    %ecx,%esi
  jl     L516
  cmp    %ebp,%r9d
  jge    L512
  mov    %ecx,(%rdx)
  mov    %edi,(%r15)
L519:
  add    $0x4,%rdx
  mov    %r9d,%r13d
  jmp    L15
L512:
  mov    (%r12),%eax
  mov    %eax,(%rdx)
  mov    %edi,(%r12)
  cmp    %ebp,%r8d
  jge    L391
L172:
  mov    (%r15),%edi
  lea    (%r14,%r11,4),%rcx
  mov    %ebp,%edx
  nopl   0x0(%rax,%rax,1)
L383:
  mov    (%rcx),%esi
  lea    0x1(%rbx),%r9d
  cmp    %esi,%edi
  jg     L611
  movslq %edx,%rax
  lea    -0x4(%r14,%rax,4),%rax
  nopw   0x0(%rax,%rax,1)
L346:
  mov    %rax,%r11
  mov    (%rax),%r10d
  sub    $0x4,%rax
  sub    $0x1,%edx
  cmp    %r10d,%edi
  jl     L346
  cmp    %edx,%r9d
  jge    L133
  mov    %r10d,(%rcx)
  mov    %esi,(%r11)
L611:
  add    $0x4,%rcx
  mov    %r9d,%ebx
  jmp    L383
L391:
  lea    0x2(%r13),%r8d
  cmp    %r8d,0xc(%rsp)
  jle    L399
  lea    0x1(%r13),%ebx
  movslq %r8d,%r11
  jmp    L90
  nopl   (%rax)
L133:
  mov    (%r15),%eax
  mov    %r14,%rdi
  mov    %eax,(%rcx)
  mov    %esi,(%r15)
  mov    %r8d,%esi
  call   <QuickSort>
  lea    0x2(%rbx),%r8d
  cmp    %r8d,%ebp
  jle    L391
  add    $0x1,%ebx
  movslq %r8d,%r11
  jmp    L172
L399:
  mov    0x78(%rsp),%eax
  lea    0x2(%rax),%r8d
  cmp    %r8d,0x54(%rsp)
  jle    L7
  lea    0x1(%rax),%ebx
  movslq %r8d,%r11
  jmp    L505
L7:
  mov    0x7c(%rsp),%r15d
  mov    %r14,%r10
L600:
  lea    0x2(%r15),%r8d
  cmp    %r8d,0x50(%rsp)
  jle    L424
  lea    0x1(%r15),%r13d
  movslq %r8d,%r11
  jmp    L393
L424:
  mov    0x74(%rsp),%eax
  lea    0x2(%rax),%r8d
  cmp    %r8d,0x3c(%rsp)
  jle    L248
  lea    0x1(%rax),%r13d
  movslq %r8d,%r11
  jmp    L524
L248:
  mov    0x70(%rsp),%eax
  lea    0x2(%rax),%r11d
  cmp    %r11d,0x38(%rsp)
  jle    L389
  lea    0x1(%rax),%r13d
  movslq %r11d,%r14
  jmp    L244
```

assistant: ```c
void QuickSort(int a[], int m, int n) {
  int i, j, v, x;
  if (n > m) {
    i = m - 1;
    j = n;
    v = a[n];
    while (1) {
      do {
        ++i;
      } while (a[i] < v);
      do {
        --j;
      } while (a[j] > v);
      if (i >= j)
        break;
      x = a[i];
      a[i] = a[j];
      a[j] = x;
    }
    x = a[i];
    a[i] = a[n];
    a[n] = x;
    QuickSort(a, m, j);
    QuickSort(a, i + 1, n);
  }
}
```