user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<quicksort>:
  endbr64
  cmp    %esi,%edx
  jg     L49
  xor    %eax,%eax
  ret
  nopl   0x0(%rax,%rax,1)
L49:
  push   %r15
  push   %r14
  push   %r13
  mov    %esi,%r13d
  push   %r12
  mov    %edx,%r12d
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  sub    $0x18,%rsp
  call   <pivot@plt>
  mov    %r12d,%edx
  mov    %r13d,%esi
  mov    %rbp,%rdi
  mov    %eax,%ecx
  call   <partition@plt>
  mov    %eax,%ebx
  cmp    %eax,%r13d
  jge    L102
  mov    %eax,%edx
  mov    %r13d,%esi
  mov    %rbp,%rdi
  call   <pivot@plt>
  mov    %ebx,%edx
  mov    %r13d,%esi
  mov    %rbp,%rdi
  mov    %eax,%ecx
  call   <partition@plt>
  mov    %eax,%r14d
  cmp    %eax,%r13d
  jl     L77
L112:
  add    $0x1,%r14d
  cmp    %r14d,%ebx
  jg     L58
L102:
  lea    0x1(%rbx),%r15d
  cmp    %r12d,%r15d
  jge    L88
  mov    %r12d,%edx
  mov    %r15d,%esi
  mov    %rbp,%rdi
  call   <pivot@plt>
  mov    %r12d,%edx
  mov    %r15d,%esi
  mov    %rbp,%rdi
  mov    %eax,%ecx
  call   <partition@plt>
  mov    %eax,%r13d
  cmp    %eax,%r15d
  jl     L17
L94:
  add    $0x1,%r13d
  cmp    %r13d,%r12d
  jg     L122
L88:
  add    $0x18,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L122:
  mov    %r12d,%edx
  mov    %r13d,%esi
  mov    %rbp,%rdi
  call   <pivot@plt>
  mov    %r12d,%edx
  mov    %r13d,%esi
  mov    %rbp,%rdi
  mov    %eax,%ecx
  call   <partition@plt>
  mov    %eax,%ebx
  cmp    %eax,%r13d
  jge    L158
  mov    %eax,%edx
  mov    %r13d,%esi
  mov    %rbp,%rdi
  call   <pivot@plt>
  mov    %ebx,%edx
  mov    %r13d,%esi
  mov    %rbp,%rdi
  mov    %eax,%ecx
  call   <partition@plt>
  mov    %r13d,%esi
  mov    %rbp,%rdi
  mov    %eax,%r14d
  mov    %eax,%edx
  call   <quicksort>
  lea    0x1(%r14),%esi
  mov    %ebx,%edx
  mov    %rbp,%rdi
  call   <quicksort>
L158:
  lea    0x1(%rbx),%r13d
  cmp    %r13d,%r12d
  jle    L88
  mov    %r12d,%edx
  mov    %r13d,%esi
  mov    %rbp,%rdi
  call   <pivot@plt>
  mov    %r12d,%edx
  mov    %r13d,%esi
  mov    %rbp,%rdi
  mov    %eax,%ecx
  call   <partition@plt>
  mov    %r13d,%esi
  mov    %rbp,%rdi
  mov    %eax,%ebx
  mov    %eax,%edx
  call   <quicksort>
  lea    0x1(%rbx),%esi
  mov    %r12d,%edx
  mov    %rbp,%rdi
  call   <quicksort>
  jmp    L88
L17:
  mov    %eax,%edx
  mov    %r15d,%esi
  mov    %rbp,%rdi
  call   <pivot@plt>
  mov    %r13d,%edx
  mov    %r15d,%esi
  mov    %rbp,%rdi
  mov    %eax,%ecx
  call   <partition@plt>
  mov    %eax,%r14d
  cmp    %eax,%r15d
  jge    L31
  mov    %eax,%edx
  mov    %r15d,%esi
  mov    %rbp,%rdi
  call   <pivot@plt>
  mov    %r14d,%edx
  mov    %r15d,%esi
  mov    %rbp,%rdi
  mov    %eax,%ecx
  call   <partition@plt>
  mov    %r15d,%esi
  mov    %rbp,%rdi
  mov    %eax,%ebx
  mov    %eax,%edx
  call   <quicksort>
  lea    0x1(%rbx),%esi
  mov    %r14d,%edx
  mov    %rbp,%rdi
  call   <quicksort>
L31:
  add    $0x1,%r14d
  cmp    %r14d,%r13d
  jle    L94
  mov    %r13d,%edx
  mov    %r14d,%esi
  mov    %rbp,%rdi
  call   <pivot@plt>
  mov    %r13d,%edx
  mov    %r14d,%esi
  mov    %rbp,%rdi
  mov    %eax,%ecx
  call   <partition@plt>
  mov    %r14d,%esi
  mov    %rbp,%rdi
  mov    %eax,%ebx
  mov    %eax,%edx
  call   <quicksort>
  lea    0x1(%rbx),%esi
  mov    %r13d,%edx
  mov    %rbp,%rdi
  call   <quicksort>
  jmp    L94
  nopl   0x0(%rax)
L58:
  mov    %ebx,%edx
  mov    %r14d,%esi
  mov    %rbp,%rdi
  call   <pivot@plt>
  mov    %ebx,%edx
  mov    %r14d,%esi
  mov    %rbp,%rdi
  mov    %eax,%ecx
  call   <partition@plt>
  mov    %eax,%r13d
  cmp    %eax,%r14d
  jge    L52
  mov    %eax,%edx
  mov    %r14d,%esi
  mov    %rbp,%rdi
  call   <pivot@plt>
  mov    %r13d,%edx
  mov    %r14d,%esi
  mov    %rbp,%rdi
  mov    %eax,%ecx
  call   <partition@plt>
  mov    %r14d,%esi
  mov    %rbp,%rdi
  mov    %eax,%r15d
  mov    %eax,%edx
  call   <quicksort>
  lea    0x1(%r15),%esi
  mov    %r13d,%edx
  mov    %rbp,%rdi
  call   <quicksort>
L52:
  add    $0x1,%r13d
  cmp    %r13d,%ebx
  jle    L102
  mov    %ebx,%edx
  mov    %r13d,%esi
  mov    %rbp,%rdi
  call   <pivot@plt>
  mov    %ebx,%edx
  mov    %r13d,%esi
  mov    %rbp,%rdi
  mov    %eax,%ecx
  call   <partition@plt>
  mov    %r13d,%esi
  mov    %rbp,%rdi
  mov    %eax,%r14d
  mov    %eax,%edx
  call   <quicksort>
  lea    0x1(%r14),%esi
  mov    %ebx,%edx
  mov    %rbp,%rdi
  call   <quicksort>
  jmp    L102
  nopl   0x0(%rax)
L77:
  mov    %eax,%edx
  mov    %r13d,%esi
  mov    %rbp,%rdi
  call   <pivot@plt>
  mov    %r14d,%edx
  mov    %r13d,%esi
  mov    %rbp,%rdi
  mov    %eax,%ecx
  call   <partition@plt>
  mov    %eax,%r15d
  cmp    %eax,%r13d
  jge    L176
  mov    %eax,%edx
  mov    %r13d,%esi
  mov    %rbp,%rdi
  call   <pivot@plt>
  mov    %r15d,%edx
  mov    %r13d,%esi
  mov    %rbp,%rdi
  mov    %eax,%ecx
  call   <partition@plt>
  mov    %r13d,%esi
  mov    %rbp,%rdi
  mov    %eax,%edx
  mov    %eax,0xc(%rsp)
  call   <quicksort>
  mov    0xc(%rsp),%edx
  mov    %rbp,%rdi
  lea    0x1(%rdx),%esi
  mov    %r15d,%edx
  call   <quicksort>
L176:
  add    $0x1,%r15d
  cmp    %r15d,%r14d
  jle    L112
  mov    %r14d,%edx
  mov    %r15d,%esi
  mov    %rbp,%rdi
  call   <pivot@plt>
  mov    %r14d,%edx
  mov    %r15d,%esi
  mov    %rbp,%rdi
  mov    %eax,%ecx
  call   <partition@plt>
  mov    %r15d,%esi
  mov    %rbp,%rdi
  mov    %eax,%r13d
  mov    %eax,%edx
  call   <quicksort>
  lea    0x1(%r13),%esi
  mov    %r14d,%edx
  mov    %rbp,%rdi
  call   <quicksort>
  jmp    L112
```

assistant: ```c
int quicksort(int *A, int f, int l) {
  if (l <= f)
    return 0;
  int p = pivot(A, f, l);
  int k = partition(A, f, l, p);
  quicksort(A, f, k);
  quicksort(A, k + 1, l);
  return 0;
}
```