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

```asm
<quick_sort>:
  endbr64
  push   %r15
  lea    0x1(%rsi),%eax
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x48,%rsp
  mov    %edx,0x30(%rsp)
  cmp    %eax,%edx
  jle    L147
  mov    %rdi,%r15
  mov    %esi,%r14d
L342:
  mov    0x30(%rsp),%ebx
  movslq %r14d,%r13
  lea    (%rbx,%r14,1),%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  mov    %ebx,%edx
  sar    %eax
  cltq
  mov    (%r15,%rax,4),%esi
  mov    %r13,%rax
L469:
  mov    (%r15,%rax,4),%edi
  lea    -0x1(%rax),%ebx
  mov    %eax,0x3c(%rsp)
  mov    %ebx,0x1c(%rsp)
  mov    %eax,0x8(%rsp)
  cmp    %esi,%edi
  jl     L383
  mov    %eax,%r10d
  cmp    %eax,%edx
  jle    L363
  movslq %edx,%rcx
  lea    -0x4(%r15,%rcx,4),%rcx
L572:
  mov    %rcx,%r9
  mov    (%rcx),%r8d
  sub    $0x4,%rcx
  sub    $0x1,%edx
  cmp    %esi,%r8d
  jg     L572
  cmp    %r10d,%edx
  jle    L363
  mov    %r8d,(%r15,%rax,4)
  mov    %edi,(%r9)
L383:
  add    $0x1,%rax
  jmp    L469
L147:
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L363:
  mov    %r14d,%r9d
  cmp    0x1c(%rsp),%r14d
  jge    L146
L574:
  mov    0x8(%rsp),%ebx
  lea    (%rbx,%r9,1),%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  mov    %ebx,%edx
  sar    %eax
  cltq
  mov    (%r15,%rax,4),%esi
  mov    %r13,%rax
L269:
  mov    (%r15,%rax,4),%edi
  lea    -0x1(%rax),%ebx
  mov    %eax,0xc(%rsp)
  mov    %ebx,0x20(%rsp)
  cmp    %edi,%esi
  jg     L462
  mov    %eax,%r11d
  cmp    %eax,%edx
  jle    L37
  movslq %edx,%rcx
  lea    -0x4(%r15,%rcx,4),%rcx
L623:
  mov    %rcx,%r10
  mov    (%rcx),%r8d
  sub    $0x4,%rcx
  sub    $0x1,%edx
  cmp    %r8d,%esi
  jl     L623
  cmp    %r11d,%edx
  jle    L37
  mov    %r8d,(%r15,%rax,4)
  mov    %edi,(%r10)
L462:
  add    $0x1,%rax
  jmp    L269
L146:
  mov    0x3c(%rsp),%eax
  add    $0x1,%eax
  cmp    0x30(%rsp),%eax
  jge    L147
  mov    0x8(%rsp),%r14d
  jmp    L342
L37:
  cmp    0x20(%rsp),%r9d
  jge    L705
L179:
  mov    0xc(%rsp),%ebx
  lea    (%rbx,%r9,1),%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  mov    %ebx,%edx
  sar    %eax
  cltq
  mov    (%r15,%rax,4),%esi
  mov    %r13,%rax
L446:
  mov    (%r15,%rax,4),%edi
  lea    -0x1(%rax),%ebx
  mov    %eax,0x10(%rsp)
  mov    %ebx,0x24(%rsp)
  cmp    %edi,%esi
  jg     L499
  mov    %eax,%r11d
  cmp    %eax,%edx
  jle    L143
  movslq %edx,%rcx
  lea    -0x4(%r15,%rcx,4),%rcx
L393:
  mov    %rcx,%r10
  mov    (%rcx),%r8d
  sub    $0x4,%rcx
  sub    $0x1,%edx
  cmp    %r8d,%esi
  jl     L393
  cmp    %r11d,%edx
  jle    L143
  mov    %r8d,(%r15,%rax,4)
  mov    %edi,(%r10)
L499:
  add    $0x1,%rax
  jmp    L446
L143:
  cmp    0x24(%rsp),%r9d
  jge    L711
  mov    %r9d,%eax
  mov    %r15,%r9
  mov    %eax,%r15d
L418:
  mov    0x10(%rsp),%ebx
  lea    (%rbx,%r15,1),%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  mov    %ebx,%edx
  sar    %eax
  cltq
  mov    (%r9,%rax,4),%esi
  mov    %r13,%rax
L407:
  mov    (%r9,%rax,4),%edi
  lea    -0x1(%rax),%ebx
  mov    %eax,0x14(%rsp)
  mov    %ebx,0x28(%rsp)
  cmp    %edi,%esi
  jg     L66
  mov    %eax,%r11d
  cmp    %eax,%edx
  jle    L301
  movslq %edx,%rcx
  lea    -0x4(%r9,%rcx,4),%rcx
L290:
  mov    %rcx,%r10
  mov    (%rcx),%r8d
  sub    $0x4,%rcx
  sub    $0x1,%edx
  cmp    %r8d,%esi
  jl     L290
  cmp    %r11d,%edx
  jle    L301
  mov    %r8d,(%r9,%rax,4)
  mov    %edi,(%r10)
L66:
  add    $0x1,%rax
  jmp    L407
L301:
  cmp    0x28(%rsp),%r15d
  jge    L414
  mov    %r15d,%r14d
  mov    %r9,%r15
L681:
  mov    0x14(%rsp),%ebx
  lea    (%rbx,%r14,1),%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  mov    %ebx,%edx
  sar    %eax
  cltq
  mov    (%r15,%rax,4),%esi
  mov    %r13,%rax
L340:
  mov    (%r15,%rax,4),%edi
  lea    -0x1(%rax),%ecx
  mov    %eax,0x18(%rsp)
  mov    %ecx,0x2c(%rsp)
  cmp    %edi,%esi
  jg     L113
  mov    %eax,%r10d
  cmp    %eax,%edx
  jle    L704
  movslq %edx,%rcx
  lea    -0x4(%r15,%rcx,4),%rcx
L380:
  mov    %rcx,%r9
  mov    (%rcx),%r8d
  sub    $0x4,%rcx
  sub    $0x1,%edx
  cmp    %r8d,%esi
  jl     L380
  cmp    %r10d,%edx
  jle    L704
  mov    %r8d,(%r15,%rax,4)
  mov    %edi,(%r9)
L113:
  add    $0x1,%rax
  jmp    L340
L704:
  mov    %r14d,%esi
  cmp    0x2c(%rsp),%r14d
  jge    L62
L233:
  mov    0x18(%rsp),%ebx
  lea    -0x1(%rsi),%r9d
  lea    (%rbx,%rsi,1),%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  mov    %ebx,%edx
  sar    %eax
  cltq
  mov    (%r15,%rax,4),%r8d
  lea    (%r15,%r13,4),%rax
L214:
  mov    (%rax),%r11d
  lea    0x1(%r9),%r14d
  cmp    %r11d,%r8d
  jg     L246
  cmp    %edx,%r14d
  jge    L102
  movslq %edx,%rcx
  lea    -0x4(%r15,%rcx,4),%rcx
  nop
L627:
  mov    %rcx,%r10
  mov    (%rcx),%edi
  sub    $0x4,%rcx
  sub    $0x1,%edx
  cmp    %edi,%r8d
  jl     L627
  cmp    %edx,%r14d
  jge    L102
  mov    %edi,(%rax)
  mov    %r11d,(%r10)
L246:
  add    $0x4,%rax
  mov    %r14d,%r9d
  jmp    L214
L102:
  mov    %r9d,0x38(%rsp)
  cmp    %esi,%r9d
  jle    L24
  mov    %r14d,0x34(%rsp)
L53:
  mov    0x34(%rsp),%ebx
  lea    (%rsi,%rbx,1),%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  mov    %ebx,%edx
  sar    %eax
  cltq
  mov    (%r15,%rax,4),%r10d
  mov    %r13,%rax
  nopw   0x0(%rax,%rax,1)
L34:
  mov    (%r15,%rax,4),%r8d
  lea    -0x1(%rax),%ecx
  mov    %eax,%ebp
  cmp    %r8d,%r10d
  jg     L308
  mov    %eax,%r11d
  cmp    %eax,%edx
  jle    L348
  movslq %edx,%rdi
  lea    -0x4(%r15,%rdi,4),%rdi
  nopl   (%rax)
L125:
  mov    %rdi,%rbx
  mov    (%rdi),%r9d
  sub    $0x4,%rdi
  sub    $0x1,%edx
  cmp    %r9d,%r10d
  jl     L125
  cmp    %r11d,%edx
  jle    L348
  mov    %r9d,(%r15,%rax,4)
  mov    %r8d,(%rbx)
L308:
  add    $0x1,%rax
  jmp    L34
L348:
  mov    %ecx,%ebx
  cmp    %ecx,%esi
  jge    L347
L448:
  lea    0x0(%rbp,%rsi,1),%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  mov    %ebp,%edx
  sar    %eax
  cltq
  mov    (%r15,%rax,4),%edi
  mov    %r13,%rax
  xchg   %ax,%ax
L292:
  mov    (%r15,%rax,4),%ecx
  lea    -0x1(%rax),%r14d
  mov    %eax,%r12d
  cmp    %ecx,%edi
  jg     L571
  mov    %eax,%r11d
  cmp    %eax,%edx
  jle    L185
  movslq %edx,%r8
  lea    -0x4(%r15,%r8,4),%r8
  xchg   %ax,%ax
L539:
  mov    %r8,%r10
  mov    (%r8),%r9d
  sub    $0x4,%r8
  sub    $0x1,%edx
  cmp    %r9d,%edi
  jl     L539
  cmp    %r11d,%edx
  jle    L185
  mov    %r9d,(%r15,%rax,4)
  mov    %ecx,(%r10)
L571:
  add    $0x1,%rax
  jmp    L292
L185:
  cmp    %r14d,%esi
  jge    L38
L69:
  lea    (%r12,%rsi,1),%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  mov    %r12d,%edx
  sar    %eax
  cltq
  mov    (%r15,%rax,4),%r8d
  mov    %r13,%rax
  nopw   0x0(%rax,%rax,1)
L543:
  mov    (%r15,%rax,4),%edi
  mov    %eax,%r13d
  cmp    %edi,%r8d
  jg     L560
  mov    %eax,%r9d
  cmp    %eax,%edx
  jle    L491
  movslq %edx,%rcx
  lea    -0x4(%r15,%rcx,4),%rcx
  nopl   0x0(%rax,%rax,1)
L714:
  mov    %rcx,%r11
  mov    (%rcx),%r10d
  sub    $0x4,%rcx
  sub    $0x1,%edx
  cmp    %r10d,%r8d
  jl     L714
  cmp    %r9d,%edx
  jle    L491
  mov    %r10d,(%r15,%rax,4)
  mov    %edi,(%r11)
L560:
  add    $0x1,%rax
  jmp    L543
L38:
  cmp    %ebx,%r12d
  jge    L347
  movslq %r12d,%r13
  mov    %r13,%rsi
  jmp    L448
  nopl   0x0(%rax)
L491:
  mov    %r13d,%edx
  mov    %r15,%rdi
  call   <quick_sort>
  cmp    %r14d,%r13d
  jge    L38
  movslq %r13d,%r13
  mov    %r13,%rsi
  jmp    L69
L347:
  cmp    %ebp,0x38(%rsp)
  jle    L83
  movslq %ebp,%r13
  mov    %r13,%rsi
  jmp    L53
L83:
  mov    0x34(%rsp),%r14d
L24:
  cmp    0x2c(%rsp),%r14d
  jge    L62
  movslq %r14d,%r13
  mov    %r13,%rsi
  jmp    L233
L62:
  mov    0x18(%rsp),%r14d
  mov    0x28(%rsp),%eax
  cmp    %eax,%r14d
  jge    L583
  movslq %r14d,%r13
  jmp    L681
L583:
  mov    %r15,%r9
L414:
  mov    0x14(%rsp),%r15d
  mov    0x24(%rsp),%eax
  cmp    %eax,%r15d
  jge    L447
  movslq %r15d,%r13
  jmp    L418
L447:
  mov    %r9,%r15
L711:
  mov    0x10(%rsp),%r9d
  mov    0x20(%rsp),%eax
  cmp    %eax,%r9d
  jge    L705
  movslq %r9d,%r13
  jmp    L179
L705:
  mov    0xc(%rsp),%r9d
  mov    0x1c(%rsp),%eax
  cmp    %eax,%r9d
  jge    L146
  movslq %r9d,%r13
  jmp    L574
```

assistant: ```c
void quick_sort(int32_t *a, int32_t low, int32_t high) {
  int32_t p, i, j, aux;
  if (high <= low + 1)
    return;
  p = a[(low + high) / 2];
  i = low - 1;
  j = high;
  for (;;) {
    do {
      i++;
    } while (a[i] < p);
    if (j <= i)
      break;
    do {
      j--;
    } while (a[j] > p);
    if (j <= i)
      break;
    aux = a[i];
    a[i] = a[j];
    a[j] = aux;
  }
  quick_sort(a, low, i);
  quick_sort(a, i, high);
}
```