user: Translate the below assembly code into C programming language:

```asm
<CTAI_Util_IQSort2>:
  endbr64
  cmp    %ecx,%edx
  jge    L99
  push   %r15
  movslq %ecx,%rax
  mov    %rdi,%r15
  push   %r14
  shl    $0x2,%rax
  mov    %ecx,%r14d
  push   %r13
  mov    %edx,%r13d
  push   %r12
  mov    %rsi,%r12
  push   %rbp
  push   %rbx
  sub    $0x38,%rsp
  mov    %rax,0x20(%rsp)
  add    %rdi,%rax
  mov    %rax,0x28(%rsp)
L27:
  mov    %r14d,%esi
  mov    %r13d,%edi
  call   <choose_pivot@plt>
  movslq %eax,%rbx
  movslq %r13d,%rax
  lea    0x0(,%rax,4),%rbp
  shl    $0x2,%rbx
  lea    (%r15,%rbp,1),%rax
  lea    (%r15,%rbx,1),%rsi
  mov    %rax,%rdi
  mov    %rax,0x10(%rsp)
  call   <swap@plt>
  lea    (%r12,%rbp,1),%rdi
  lea    (%r12,%rbx,1),%rsi
  mov    %rdi,0x18(%rsp)
  lea    0x1(%r13),%ebp
  call   <swap@plt>
  mov    0x10(%rsp),%rax
  mov    (%rax),%edx
  mov    %r14d,%eax
  cmp    %ebp,%r14d
  jl     L102
  nopl   (%rax)
L80:
  movslq %ebp,%rcx
  lea    (%r15,%rcx,4),%rcx
  cmp    %ebp,%r14d
  jge    L54
  jmp    L20
  cs nopw 0x0(%rax,%rax,1)
L95:
  add    $0x1,%ebp
  add    $0x4,%rcx
  cmp    %ebp,%r14d
  jl     L20
L54:
  cmp    %edx,(%rcx)
  jle    L95
L20:
  movslq %eax,%rbx
  shl    $0x2,%rbx
  cmp    %r13d,%eax
  jge    L46
  jmp    L51
  xchg   %ax,%ax
L75:
  sub    $0x4,%rbx
  cmp    %eax,%r13d
  jg     L26
L46:
  mov    %eax,%r8d
  lea    (%r15,%rbx,1),%rsi
  lea    -0x1(%rax),%eax
  cmp    %edx,(%r15,%rbx,1)
  jg     L75
  cmp    %r8d,%ebp
  jl     L156
L11:
  jne    L134
L94:
  mov    %r8d,%eax
  jmp    L80
  nopl   (%rax)
L26:
  movslq %eax,%rbx
  shl    $0x2,%rbx
L51:
  mov    %eax,%r8d
  lea    (%r15,%rbx,1),%rsi
  cmp    %r8d,%ebp
  jge    L11
L156:
  movslq %ebp,%rcx
  mov    %edx,0xc(%rsp)
  shl    $0x2,%rcx
  mov    %r8d,0x8(%rsp)
  lea    (%r15,%rcx,1),%rdi
  mov    %rcx,(%rsp)
  call   <swap@plt>
  mov    (%rsp),%rcx
  lea    (%r12,%rbx,1),%rsi
  lea    (%r12,%rcx,1),%rdi
  call   <swap@plt>
  mov    0x8(%rsp),%r8d
  mov    0xc(%rsp),%edx
  jmp    L94
L102:
  mov    0x28(%rsp),%rsi
  mov    0x20(%rsp),%rbx
  mov    %r14d,%r8d
  nopl   0x0(%rax)
L134:
  mov    0x10(%rsp),%rdi
  mov    %r8d,(%rsp)
  call   <swap@plt>
  mov    0x18(%rsp),%rdi
  lea    (%r12,%rbx,1),%rsi
  call   <swap@plt>
  mov    (%rsp),%r8d
  mov    %r13d,%edx
  mov    %r12,%rsi
  mov    %r15,%rdi
  lea    -0x1(%r8),%ecx
  call   <CTAI_Util_IQSort2>
  mov    (%rsp),%r8d
  lea    0x1(%r8),%r13d
  cmp    %r14d,%r13d
  jl     L27
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L99:
  ret
```

assistant: ```c
void CTAI_Util_IQSort2(int *list, int *indx, int m, int n) {
  int key, i, j, k;
  if (m < n) {
    k = choose_pivot(m, n);
    swap(&list[m], &list[k]);
    swap(&indx[m], &indx[k]);
    key = list[m];
    i = m + 1;
    j = n;
    while (i <= j) {
      while ((i <= n) && (list[i] <= key))
        i++;
      while ((j >= m) && (list[j] > key))
        j--;
      if (i < j) {
        swap(&list[i], &list[j]);
        swap(&indx[i], &indx[j]);
      }
    }
    swap(&list[m], &list[j]);
    swap(&indx[m], &indx[j]);
    CTAI_Util_IQSort2(list, indx, m, j - 1);
    CTAI_Util_IQSort2(list, indx, j + 1, n);
  }
}
```