user: 请将以下的汇编代码转换成C语言代码：

```asm
<qsort>:
  endbr64
  push   %r15
  lea    0x8(%rdi),%rax
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x88,%rsp
  mov    %edx,0x38(%rsp)
  mov    %rax,0x8(%rsp)
  cmp    %edx,%esi
  jge    L434
  mov    %rdi,%r14
  mov    %esi,%r15d
L251:
  movslq %r15d,%r13
  lea    0x1(%r15),%ebx
  lea    (%r14,%r13,4),%r12
  cmp    %ebx,0x38(%rsp)
  jl     L693
  movslq %ebx,%rbx
  mov    %r15d,%ebp
  jmp    L198
L698:
  add    $0x1,%rbx
  cmp    %ebx,0x38(%rsp)
  jl     L123
L198:
  mov    (%r12),%eax
  lea    (%r14,%rbx,4),%rdi
  cmp    %eax,(%r14,%rbx,4)
  jge    L698
  add    $0x1,%ebp
  add    $0x1,%rbx
  movslq %ebp,%rax
  lea    (%r14,%rax,4),%rsi
  call   <swap@plt>
  cmp    %ebx,0x38(%rsp)
  jge    L198
L123:
  movslq %ebp,%rax
  mov    %r12,%rdi
  mov    %ebp,0x48(%rsp)
  lea    (%r14,%rax,4),%rsi
  call   <swap@plt>
  lea    -0x1(%rbp),%eax
  mov    %eax,0x44(%rsp)
  cmp    %r15d,%eax
  jle    L495
  mov    %r13,%rax
  mov    %r14,%r13
  mov    %rax,%r14
L19:
  lea    0x0(,%r14,4),%rax
  lea    0x0(%r13,%rax,1),%r12
  cmp    %r15d,0x44(%rsp)
  jle    L0
  lea    0x4(%r13,%rax,1),%rbp
  mov    0x48(%rsp),%eax
  mov    0x8(%rsp),%rcx
  mov    %r15d,0x1c(%rsp)
  sub    $0x2,%eax
  sub    %r15d,%eax
  add    %r14,%rax
  lea    (%rcx,%rax,4),%rbx
  jmp    L394
L577:
  add    $0x4,%rbp
  cmp    %rbp,%rbx
  je     L355
L394:
  mov    (%r12),%eax
  cmp    %eax,0x0(%rbp)
  jge    L577
  addl   $0x1,0x1c(%rsp)
  movslq 0x1c(%rsp),%rax
  mov    %rbp,%rdi
  add    $0x4,%rbp
  lea    0x0(%r13,%rax,4),%rsi
  call   <swap@plt>
  cmp    %rbp,%rbx
  jne    L394
L355:
  mov    0x1c(%rsp),%ebx
  mov    %r12,%rdi
  movslq %ebx,%rax
  lea    0x0(%r13,%rax,4),%rsi
  call   <swap@plt>
  mov    %ebx,%eax
  lea    -0x1(%rbx),%ecx
  sub    $0x2,%eax
  mov    %ecx,0x4c(%rsp)
  mov    %eax,0x6c(%rsp)
  cmp    %r15d,%ecx
  jle    L556
  mov    %r14,%rbp
  mov    %r13,%r14
L162:
  lea    0x0(,%rbp,4),%rax
  lea    (%r14,%rax,1),%r12
  cmp    %r15d,0x4c(%rsp)
  jle    L113
  lea    0x4(%r14,%rax,1),%r13
  mov    0x6c(%rsp),%eax
  mov    0x8(%rsp),%rdi
  mov    %r15d,0x20(%rsp)
  sub    %r15d,%eax
  add    %rbp,%rax
  lea    (%rdi,%rax,4),%rbx
  jmp    L381
L538:
  add    $0x4,%r13
  cmp    %r13,%rbx
  je     L192
L381:
  mov    (%r12),%eax
  cmp    %eax,0x0(%r13)
  jge    L538
  addl   $0x1,0x20(%rsp)
  movslq 0x20(%rsp),%rax
  mov    %r13,%rdi
  add    $0x4,%r13
  lea    (%r14,%rax,4),%rsi
  call   <swap@plt>
  cmp    %r13,%rbx
  jne    L381
L192:
  mov    0x20(%rsp),%ebx
  mov    %r12,%rdi
  movslq %ebx,%rax
  lea    (%r14,%rax,4),%rsi
  call   <swap@plt>
  mov    %ebx,%eax
  lea    -0x1(%rbx),%edi
  sub    $0x2,%eax
  mov    %edi,0x50(%rsp)
  mov    %eax,0x68(%rsp)
  cmp    %r15d,%edi
  jle    L389
  mov    %rbp,%r12
  mov    %r15d,%ebp
  mov    %r14,%r15
L353:
  lea    0x0(,%r12,4),%rax
  lea    (%r15,%rax,1),%r13
  cmp    %ebp,0x50(%rsp)
  jle    L724
  lea    0x4(%r15,%rax,1),%r14
  mov    0x68(%rsp),%eax
  mov    0x8(%rsp),%rdi
  mov    %ebp,0x24(%rsp)
  sub    %ebp,%eax
  add    %r12,%rax
  lea    (%rdi,%rax,4),%rbx
  jmp    L228
L581:
  add    $0x4,%r14
  cmp    %r14,%rbx
  je     L612
L228:
  mov    0x0(%r13),%eax
  cmp    %eax,(%r14)
  jge    L581
  addl   $0x1,0x24(%rsp)
  movslq 0x24(%rsp),%rax
  mov    %r14,%rdi
  add    $0x4,%r14
  lea    (%r15,%rax,4),%rsi
  call   <swap@plt>
  cmp    %r14,%rbx
  jne    L228
L612:
  mov    0x24(%rsp),%ebx
  mov    %r13,%rdi
  movslq %ebx,%rax
  lea    (%r15,%rax,4),%rsi
  call   <swap@plt>
  mov    %ebx,%eax
  lea    -0x1(%rbx),%ecx
  sub    $0x2,%eax
  mov    %ecx,0x54(%rsp)
  mov    %eax,0x64(%rsp)
  cmp    %ebp,%ecx
  jle    L437
  mov    %r15,%r14
  mov    %ebp,%r13d
  mov    %r12,%r15
L616:
  lea    0x0(,%r15,4),%rax
  lea    (%r14,%rax,1),%r12
  cmp    %r13d,0x54(%rsp)
  jle    L533
  lea    0x4(%r14,%rax,1),%rbp
  mov    0x64(%rsp),%eax
  mov    0x8(%rsp),%rdi
  mov    %r13d,0x28(%rsp)
  sub    %r13d,%eax
  add    %r15,%rax
  lea    (%rdi,%rax,4),%rbx
  jmp    L147
L211:
  add    $0x4,%rbp
  cmp    %rbp,%rbx
  je     L472
L147:
  mov    (%r12),%eax
  cmp    %eax,0x0(%rbp)
  jge    L211
  addl   $0x1,0x28(%rsp)
  movslq 0x28(%rsp),%rax
  mov    %rbp,%rdi
  add    $0x4,%rbp
  lea    (%r14,%rax,4),%rsi
  call   <swap@plt>
  cmp    %rbp,%rbx
  jne    L147
L472:
  mov    0x28(%rsp),%ebx
  mov    %r12,%rdi
  movslq %ebx,%rax
  lea    (%r14,%rax,4),%rsi
  call   <swap@plt>
  mov    %ebx,%eax
  lea    -0x1(%rbx),%edi
  sub    $0x2,%eax
  mov    %edi,0x2c(%rsp)
  mov    %eax,0x60(%rsp)
  cmp    %r13d,%edi
  jle    L496
  mov    %r13d,%r12d
  mov    %r15,%rdx
L540:
  lea    0x0(,%rdx,4),%rax
  lea    (%r14,%rax,1),%rbp
  cmp    %r12d,0x2c(%rsp)
  jle    L630
  lea    0x4(%r14,%rax,1),%rbx
  mov    0x60(%rsp),%eax
  mov    0x8(%rsp),%rcx
  mov    %rdx,%r15
  mov    %r12d,0x14(%rsp)
  sub    %r12d,%eax
  add    %rdx,%rax
  lea    (%rcx,%rax,4),%r13
  jmp    L15
L66:
  add    $0x4,%rbx
  cmp    %rbx,%r13
  je     L244
L15:
  mov    0x0(%rbp),%eax
  cmp    %eax,(%rbx)
  jge    L66
  addl   $0x1,0x14(%rsp)
  movslq 0x14(%rsp),%rax
  mov    %rbx,%rdi
  add    $0x4,%rbx
  lea    (%r14,%rax,4),%rsi
  call   <swap@plt>
  cmp    %rbx,%r13
  jne    L15
L244:
  movslq 0x14(%rsp),%rax
  mov    %rbp,%rdi
  mov    %r15,0x30(%rsp)
  mov    %rax,%rbx
  lea    (%r14,%rax,4),%rsi
  call   <swap@plt>
  mov    %ebx,%eax
  lea    -0x1(%rbx),%ecx
  sub    $0x2,%eax
  mov    %ecx,0x18(%rsp)
  mov    %eax,0x40(%rsp)
  cmp    %r12d,%ecx
  jle    L250
  mov    0x30(%rsp),%rdx
  mov    %r12d,%r15d
L438:
  lea    0x0(,%rdx,4),%rax
  lea    (%r14,%rax,1),%r13
  cmp    %r15d,0x18(%rsp)
  jle    L372
  lea    0x4(%r14,%rax,1),%rbp
  mov    0x40(%rsp),%eax
  mov    0x8(%rsp),%rcx
  mov    %r15d,%ebx
  sub    %r15d,%eax
  add    %rdx,%rax
  lea    (%rcx,%rax,4),%r12
  jmp    L703
  nopl   (%rax)
L290:
  add    $0x4,%rbp
  cmp    %rbp,%r12
  je     L137
L703:
  mov    0x0(%r13),%eax
  cmp    %eax,0x0(%rbp)
  jge    L290
  add    $0x1,%ebx
  mov    %rbp,%rdi
  add    $0x4,%rbp
  mov    %rdx,0x30(%rsp)
  movslq %ebx,%rax
  lea    (%r14,%rax,4),%rsi
  call   <swap@plt>
  mov    0x30(%rsp),%rdx
  cmp    %rbp,%r12
  jne    L703
L137:
  movslq %ebx,%rax
  mov    %r13,%rdi
  mov    %rdx,0x58(%rsp)
  lea    -0x1(%rbx),%ebp
  lea    (%r14,%rax,4),%rsi
  call   <swap@plt>
  lea    -0x2(%rbx),%eax
  mov    %eax,0x3c(%rsp)
  cmp    %r15d,%ebp
  jle    L50
  mov    0x58(%rsp),%r13
  mov    %ebx,0x30(%rsp)
  mov    %r14,%rbx
  nopw   0x0(%rax,%rax,1)
L498:
  lea    0x0(,%r13,4),%rax
  lea    (%rbx,%rax,1),%r9
  cmp    %r15d,%ebp
  jle    L150
  lea    0x4(%rbx,%rax,1),%r12
  mov    0x3c(%rsp),%eax
  mov    0x8(%rsp),%rcx
  mov    %r15d,%r14d
  sub    %r15d,%eax
  add    %r13,%rax
  lea    (%rcx,%rax,4),%rdx
  jmp    L738
  nopw   0x0(%rax,%rax,1)
L492:
  add    $0x4,%r12
  cmp    %r12,%rdx
  je     L91
L738:
  mov    (%r9),%eax
  cmp    %eax,(%r12)
  jge    L492
  add    $0x1,%r14d
  mov    %r12,%rdi
  mov    %r9,0x70(%rsp)
  add    $0x4,%r12
  movslq %r14d,%rax
  mov    %rdx,0x58(%rsp)
  lea    (%rbx,%rax,4),%rsi
  call   <swap@plt>
  mov    0x58(%rsp),%rdx
  mov    0x70(%rsp),%r9
  cmp    %r12,%rdx
  jne    L738
L91:
  movslq %r14d,%rax
  mov    %r9,%rdi
  lea    -0x1(%r14),%r12d
  lea    (%rbx,%rax,4),%rsi
  call   <swap@plt>
  lea    -0x2(%r14),%eax
  mov    %eax,0x58(%rsp)
  cmp    %r15d,%r12d
  jle    L301
  mov    %r14d,%r9d
  mov    %r12d,%r14d
L99:
  lea    0x0(,%r13,4),%rax
  lea    (%rbx,%rax,1),%r8
  cmp    %r15d,%r14d
  jle    L275
  lea    0x4(%rbx,%rax,1),%r12
  mov    0x58(%rsp),%eax
  mov    0x8(%rsp),%rcx
  mov    %r14d,0x70(%rsp)
  mov    %r15d,0x78(%rsp)
  mov    %rbx,%r14
  sub    %r15d,%eax
  add    %r13,%rax
  mov    %r15d,%r13d
  mov    %ebp,%r15d
  mov    %r8,%rbp
  lea    (%rcx,%rax,4),%rdx
  mov    %rdx,%rbx
  jmp    L712
  nopl   0x0(%rax)
L572:
  add    $0x4,%r12
  cmp    %r12,%rbx
  je     L543
L712:
  mov    0x0(%rbp),%eax
  cmp    %eax,(%r12)
  jge    L572
  add    $0x1,%r13d
  mov    %r12,%rdi
  add    $0x4,%r12
  mov    %r9d,0x7c(%rsp)
  movslq %r13d,%rax
  lea    (%r14,%rax,4),%rsi
  call   <swap@plt>
  mov    0x7c(%rsp),%r9d
  cmp    %r12,%rbx
  jne    L712
L543:
  mov    %rbp,%r8
  mov    %r14,%rbx
  movslq %r13d,%rax
  mov    %r15d,%ebp
  mov    0x78(%rsp),%r15d
  mov    %r8,%rdi
  mov    0x70(%rsp),%r14d
  lea    (%rbx,%rax,4),%rsi
  mov    %r9d,0x7c(%rsp)
  call   <swap@plt>
  mov    %r15d,%esi
  lea    -0x1(%r13),%edx
  mov    %rbx,%rdi
  call   <qsort>
  lea    0x1(%r13),%r15d
  mov    0x7c(%rsp),%r9d
  cmp    %r15d,%r14d
  jle    L584
  movslq %r15d,%r13
  jmp    L99
L0:
  mov    %r12,%rsi
  mov    %r12,%rdi
  mov    %r13,%r14
  call   <swap@plt>
L495:
  mov    0x48(%rsp),%r15d
  add    $0x1,%r15d
  cmp    0x38(%rsp),%r15d
  jl     L251
L434:
  add    $0x88,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L113:
  mov    %r12,%rsi
  mov    %r12,%rdi
  mov    %r14,%r13
  call   <swap@plt>
L556:
  mov    0x1c(%rsp),%r15d
  add    $0x1,%r15d
  cmp    %r15d,0x44(%rsp)
  jle    L489
  movslq %r15d,%r14
  jmp    L19
L489:
  mov    %r13,%r14
  jmp    L495
L150:
  mov    %r9,%rsi
  mov    %r9,%rdi
  mov    %rbx,%r14
  mov    0x30(%rsp),%ebx
  call   <swap@plt>
L50:
  lea    0x1(%rbx),%r15d
  cmp    %r15d,0x18(%rsp)
  jle    L250
  movslq %r15d,%rdx
  jmp    L438
L372:
  mov    %r13,%rsi
  mov    %r13,%rdi
  call   <swap@plt>
L250:
  mov    0x14(%rsp),%r12d
  add    $0x1,%r12d
  cmp    %r12d,0x2c(%rsp)
  jle    L496
  movslq %r12d,%rdx
  jmp    L540
  nop
L275:
  mov    %r8,%rsi
  mov    %r8,%rdi
  mov    %r9d,%r14d
  call   <swap@plt>
  lea    -0x1(%r15),%edx
  mov    %r15d,%esi
  mov    %rbx,%rdi
  call   <qsort>
L301:
  lea    0x1(%r14),%r15d
  cmp    %r15d,%ebp
  jle    L748
  movslq %r15d,%r13
  jmp    L498
L748:
  mov    %rbx,%r14
  mov    0x30(%rsp),%ebx
  jmp    L50
L630:
  mov    %rbp,%rsi
  mov    %rbp,%rdi
  call   <swap@plt>
L496:
  mov    0x28(%rsp),%r13d
  add    $0x1,%r13d
  cmp    %r13d,0x54(%rsp)
  jle    L444
  movslq %r13d,%r15
  jmp    L616
L584:
  mov    %r9d,%r14d
  jmp    L301
L444:
  mov    %r14,%r15
L437:
  mov    0x24(%rsp),%ebp
  add    $0x1,%ebp
  cmp    %ebp,0x50(%rsp)
  jle    L466
  movslq %ebp,%r12
  jmp    L353
L466:
  mov    %r15,%r14
L389:
  mov    0x20(%rsp),%r15d
  add    $0x1,%r15d
  cmp    %r15d,0x4c(%rsp)
  jle    L349
L751:
  movslq %r15d,%rbp
  jmp    L162
L533:
  mov    %r12,%rsi
  mov    %r12,%rdi
  mov    %r14,%r15
  call   <swap@plt>
  jmp    L437
L724:
  mov    %r13,%rsi
  mov    %r13,%rdi
  mov    %r15,%r14
  call   <swap@plt>
  mov    0x20(%rsp),%r15d
  add    $0x1,%r15d
  cmp    %r15d,0x4c(%rsp)
  jg     L751
L349:
  mov    %r14,%r13
  jmp    L556
L693:
  add    $0x88,%rsp
  mov    %r12,%rsi
  mov    %r12,%rdi
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1050 <swap@plt>
```

assistant: ```c
void qsort(int *x, int l, int u) {
  if (l >= u)
    return;
  int m, i;
  m = l;
  for (i = l + 1; i <= u; i++) {
    if (x[i] < x[l])
      swap(x + i, x + (++m));
  }
  swap(x + l, x + m);
  qsort(x, l, m - 1);
  qsort(x, m + 1, u);
}
```