user: Please show me the C implementation that matches the assembly code listed below:

```asm
<sCompRow_to_CompCol>:
  endbr64
  push   %r15
  push   %r14
  mov    %rcx,%r14
  push   %r13
  mov    %r8,%r13
  push   %r12
  push   %rbp
  mov    %esi,%ebp
  push   %rbx
  mov    %edi,%ebx
  mov    %edx,%edi
  sub    $0x28,%rsp
  mov    0x70(%rsp),%rax
  mov    0x60(%rsp),%r15
  mov    %r9,0x18(%rsp)
  mov    %edx,0x14(%rsp)
  mov    0x68(%rsp),%r12
  mov    %rax,0x8(%rsp)
  call   <doubleMalloc@plt>
  mov    0x14(%rsp),%edi
  mov    %rax,(%r15)
  call   <intMalloc@plt>
  lea    0x1(%rbp),%edi
  mov    %rax,(%r12)
  call   <intMalloc@plt>
  mov    0x8(%rsp),%rcx
  mov    %ebp,%edi
  mov    %rax,(%rcx)
  call   <intCalloc@plt>
  test   %ebx,%ebx
  mov    0x18(%rsp),%r9
  mov    %rax,%rdi
  jle    L51
  lea    0x4(%r9),%r8
  lea    -0x1(%rbx),%eax
  mov    %r8,%rsi
  lea    0x8(%r9,%rax,4),%r10
  cs nopw 0x0(%rax,%rax,1)
L5:
  movslq -0x4(%rsi),%rax
  cmp    (%rsi),%eax
  jge    L119
  nopl   0x0(%rax,%rax,1)
L0:
  movslq 0x0(%r13,%rax,4),%rdx
  add    $0x1,%rax
  addl   $0x1,(%rdi,%rdx,4)
  cmp    %eax,(%rsi)
  jg     L0
L119:
  add    $0x4,%rsi
  cmp    %rsi,%r10
  jne    L5
  mov    0x8(%rsp),%rax
  mov    (%rax),%rax
  movl   $0x0,(%rax)
  test   %ebp,%ebp
  jle    L13
L102:
  lea    -0x1(%rbp),%edx
  mov    %rdi,%r10
  lea    0x4(%rax,%rdx,4),%r11
  sub    %rax,%r10
  nopw   0x0(%rax,%rax,1)
L109:
  lea    (%r10,%rax,1),%rdx
  mov    (%rax),%esi
  add    $0x4,%rax
  mov    (%rdx),%r8d
  add    %esi,%r8d
  mov    %r8d,(%rax)
  mov    %esi,(%rdx)
  cmp    %rax,%r11
  jne    L109
  test   %ebx,%ebx
  jle    L1
  lea    0x4(%r9),%r8
L13:
  xor    %r9d,%r9d
  nopl   (%rax)
L92:
  movslq -0x4(%r8),%rax
  cmp    (%r8),%eax
  jge    L39
  mov    (%r12),%r11
  mov    (%r15),%r10
  nopl   0x0(%rax,%rax,1)
L17:
  movslq 0x0(%r13,%rax,4),%rdx
  movsd  (%r14,%rax,8),%xmm0
  add    $0x1,%rax
  lea    (%rdi,%rdx,4),%rdx
  movslq (%rdx),%rsi
  mov    %r9d,(%r11,%rsi,4)
  movsd  %xmm0,(%r10,%rsi,8)
  addl   $0x1,(%rdx)
  cmp    %eax,(%r8)
  jg     L17
L39:
  add    $0x1,%r9d
  add    $0x4,%r8
  cmp    %r9d,%ebx
  jne    L92
L1:
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1090 <superlu_free@plt>
L51:
  mov    0x8(%rsp),%rax
  mov    (%rax),%rax
  movl   $0x0,(%rax)
  test   %ebp,%ebp
  jg     L102
  jmp    L1
```

assistant: ```c
void sCompRow_to_CompCol(int m, int n, int nnz, double *a, int *colind, int *rowptr, double **at, int **rowind, int **colptr) {
  register int i, j, col, relpos;
  int *marker;
  *at = (double *)doubleMalloc(nnz);
  *rowind = (int *)intMalloc(nnz);
  *colptr = (int *)intMalloc(n + 1);
  marker = (int *)intCalloc(n);
  for (i = 0; i < m; ++i)
    for (j = rowptr[i]; j < rowptr[i + 1]; ++j)
      ++marker[colind[j]];
  (*colptr)[0] = 0;
  for (j = 0; j < n; ++j) {
    (*colptr)[j + 1] = (*colptr)[j] + marker[j];
    marker[j] = (*colptr)[j];
  }
  for (i = 0; i < m; ++i) {
    for (j = rowptr[i]; j < rowptr[i + 1]; ++j) {
      col = colind[j];
      relpos = marker[col];
      (*rowind)[relpos] = i;
      (*at)[relpos] = a[j];
      ++marker[col];
    }
  }
  superlu_free(marker);
}
```