user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<qsort_r>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x88,%rsp
  mov    %r8,0x60(%rsp)
  cmp    %rcx,%r8
  jbe    L0
  mov    %rdi,%r13
  mov    %rsi,%r12
  mov    %rdx,%rbp
  mov    %rcx,%r15
L365:
  mov    0x60(%rsp),%r8
  mov    %r15,%rcx
  mov    %rbp,%rdx
  mov    %r12,%rsi
  mov    %r13,%rdi
  call   <partition@plt>
  mov    %rax,0x58(%rsp)
  test   %rax,%rax
  jne    L317
L206:
  mov    0x58(%rsp),%r15
  add    $0x1,%r15
  cmp    0x60(%rsp),%r15
  jb     L365
L0:
  add    $0x88,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L317:
  sub    $0x1,%rax
  mov    %rax,0x50(%rsp)
  cmp    %r15,%rax
  jbe    L206
  mov    %r15,%r14
  mov    %r12,%r15
  mov    %r13,%r12
L194:
  mov    0x50(%rsp),%r8
  mov    %r14,%rcx
  mov    %rbp,%rdx
  mov    %r15,%rsi
  mov    %r12,%rdi
  call   <partition@plt>
  mov    %rax,0x48(%rsp)
  test   %rax,%rax
  jne    L356
L124:
  mov    0x48(%rsp),%r14
  add    $0x1,%r14
  cmp    %r14,0x50(%rsp)
  ja     L194
  mov    %r12,%r13
  mov    %r15,%r12
  jmp    L206
  nop
L356:
  sub    $0x1,%rax
  mov    %rax,0x40(%rsp)
  cmp    %r14,%rax
  jbe    L124
  mov    %r14,%rax
  mov    %r15,%r14
  mov    %rax,%r15
L95:
  mov    0x40(%rsp),%r8
  mov    %r15,%rcx
  mov    %rbp,%rdx
  mov    %r14,%rsi
  mov    %r12,%rdi
  call   <partition@plt>
  mov    %rax,0x38(%rsp)
  test   %rax,%rax
  jne    L15
L142:
  mov    0x38(%rsp),%r15
  add    $0x1,%r15
  cmp    %r15,0x40(%rsp)
  ja     L95
  mov    %r14,%r15
  jmp    L124
  nopl   0x0(%rax)
L15:
  sub    $0x1,%rax
  mov    %rax,0x30(%rsp)
  cmp    %r15,%rax
  jbe    L142
  mov    %r15,%rax
  mov    %r14,%r15
  mov    %rax,%r14
L56:
  mov    0x30(%rsp),%r8
  mov    %r14,%rcx
  mov    %rbp,%rdx
  mov    %r15,%rsi
  mov    %r12,%rdi
  call   <partition@plt>
  mov    %rax,0x28(%rsp)
  test   %rax,%rax
  jne    L268
L111:
  mov    0x28(%rsp),%r14
  add    $0x1,%r14
  cmp    %r14,0x30(%rsp)
  ja     L56
  mov    %r15,%r14
  jmp    L142
  nopl   0x0(%rax)
L268:
  sub    $0x1,%rax
  mov    %rax,0x20(%rsp)
  cmp    %r14,%rax
  jbe    L111
L299:
  mov    0x20(%rsp),%r8
  mov    %r14,%rcx
  mov    %rbp,%rdx
  mov    %r15,%rsi
  mov    %r12,%rdi
  call   <partition@plt>
  mov    %rax,0x18(%rsp)
  test   %rax,%rax
  jne    L286
L39:
  mov    0x18(%rsp),%r14
  add    $0x1,%r14
  cmp    %r14,0x20(%rsp)
  ja     L299
  jmp    L111
L286:
  sub    $0x1,%rax
  mov    %rax,0x10(%rsp)
  cmp    %r14,%rax
  jbe    L39
L33:
  mov    0x10(%rsp),%r8
  mov    %r14,%rcx
  mov    %rbp,%rdx
  mov    %r15,%rsi
  mov    %r12,%rdi
  call   <partition@plt>
  mov    %rax,0x8(%rsp)
  test   %rax,%rax
  jne    L160
L163:
  mov    0x8(%rsp),%r14
  add    $0x1,%r14
  cmp    %r14,0x10(%rsp)
  ja     L33
  jmp    L39
L160:
  sub    $0x1,%rax
  mov    %rax,(%rsp)
  cmp    %r14,%rax
  jbe    L163
L7:
  mov    (%rsp),%r8
  mov    %r14,%rcx
  mov    %rbp,%rdx
  mov    %r15,%rsi
  mov    %r12,%rdi
  call   <partition@plt>
  mov    %rax,%rbx
  test   %rax,%rax
  jne    L209
L335:
  lea    0x1(%rbx),%r14
  cmp    %r14,(%rsp)
  ja     L7
  jmp    L163
  cs nopw 0x0(%rax,%rax,1)
L209:
  lea    -0x1(%rax),%r13
  cmp    %r14,%r13
  jbe    L335
  mov    %rax,0x70(%rsp)
L239:
  mov    %r13,%r8
  mov    %r14,%rcx
  mov    %rbp,%rdx
  mov    %r15,%rsi
  mov    %r12,%rdi
  call   <partition@plt>
  mov    %rax,%rbx
  test   %rax,%rax
  jne    L226
L181:
  lea    0x1(%rbx),%r14
  cmp    %r14,%r13
  ja     L239
  mov    0x70(%rsp),%rbx
  jmp    L335
  nopw   0x0(%rax,%rax,1)
L226:
  lea    -0x1(%rax),%r10
  cmp    %r14,%r10
  jbe    L181
  mov    %rax,0x68(%rsp)
  mov    %rbp,%rbx
  mov    %r12,%rbp
  mov    %r14,%r12
  mov    %r10,%r14
L113:
  mov    %r14,%r8
  mov    %r12,%rcx
  mov    %rbx,%rdx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  call   <partition@plt>
  test   %rax,%rax
  jne    L358
  cmp    $0x1,%r14
  jbe    L272
  mov    $0x1,%r12d
  jmp    L113
  nopl   0x0(%rax)
L358:
  lea    -0x1(%rax),%r8
  mov    %r12,%rcx
  mov    %rbx,%rdx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  mov    %rax,0x78(%rsp)
  call   <qsort_r>
  mov    0x78(%rsp),%rax
  lea    0x1(%rax),%r12
  cmp    %r14,%r12
  jb     L113
L272:
  mov    %rbp,%r12
  mov    %rbx,%rbp
  mov    0x68(%rsp),%rbx
  jmp    L181
```

assistant: ```c
void qsort_r(void *base, size_t size, int (*compar)(const void *, const void *), size_t low, size_t high) {
  size_t pivot;
  if (high > low) {
    pivot = partition(base, size, compar, low, high);
    if (pivot > 0)
      qsort_r(base, size, compar, low, pivot - 1);
    qsort_r(base, size, compar, pivot + 1, high);
  }
}
```