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

```asm
<addRow>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %rdi,%rbx
  mov    %rdx,%rbp
  mov    %rcx,%r14
  mov    %r8,0x8(%rsp)
  mov    %r9,0x10(%rsp)
  mov    0x78(%rsp),%r12d
  mov    0x90(%rsp),%r15d
  movsd  %xmm0,0x18(%rsp)
  mov    (%rsi),%edx
  mov    (%rdi),%eax
  add    $0x2,%eax
  cmp    %edx,%eax
  jge    L6
L5:
  mov    %r12d,%edx
  add    0x0(%rbp),%edx
  mov    (%r14),%eax
  cmp    %eax,%edx
  jge    L21
L27:
  movslq 0x0(%rbp),%rax
  mov    0x60(%rsp),%rcx
  mov    (%rcx),%rdx
  lea    (%rdx,%rax,8),%r14
  movslq %r12d,%r13
  mov    0x10(%rsp),%rdi
  mov    (%rdi),%rdx
  lea    (%rdx,%rax,4),%rdi
  lea    0x0(,%r13,4),%rdx
  mov    0x80(%rsp),%rsi
  call   <memcpy@plt>
  lea    0x0(,%r13,8),%rdx
  mov    0x88(%rsp),%rsi
  mov    %r14,%rdi
  call   <memcpy@plt>
  movslq (%rbx),%rax
  mov    0x68(%rsp),%rcx
  mov    (%rcx),%rdx
  mov    %r15b,(%rdx,%rax,1)
  movslq (%rbx),%rdx
  mov    0x70(%rsp),%rax
  mov    (%rax),%rax
  movsd  0x18(%rsp),%xmm1
  movsd  %xmm1,(%rax,%rdx,8)
  mov    0x8(%rsp),%rax
  mov    (%rax),%rax
  movslq (%rbx),%rdx
  mov    %r12d,%ecx
  add    (%rax,%rdx,4),%ecx
  mov    %ecx,0x4(%rax,%rdx,4)
  add    %r12d,0x0(%rbp)
  mov    0x98(%rsp),%r9
  mov    0xc0(%rsp),%r8
  mov    0xb0(%rsp),%rcx
  mov    0xb8(%rsp),%rdx
  mov    0xa8(%rsp),%rsi
  mov    0xa0(%rsp),%rdi
  mov    $0x0,%eax
  call   <addName@plt>
  addl   $0x1,(%rbx)
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L6:
  mov    %rsi,%r13
  lea    0x20(%rdx),%esi
  add    %edx,%edx
  cmp    %edx,%esi
  cmovl  %edx,%esi
  mov    %esi,0x0(%r13)
  add    $0x1,%esi
  movslq %esi,%rsi
  shl    $0x2,%rsi
  mov    (%r8),%rdi
  mov    $0x0,%eax
  call   <xrealloc@plt>
  cltq
  mov    0x8(%rsp),%rdi
  mov    %rax,(%rdi)
  movslq 0x0(%r13),%rsi
  mov    0x68(%rsp),%rax
  mov    (%rax),%rdi
  mov    $0x0,%eax
  call   <xrealloc@plt>
  cltq
  mov    0x68(%rsp),%rdi
  mov    %rax,(%rdi)
  movslq 0x0(%r13),%rsi
  shl    $0x3,%rsi
  mov    0x70(%rsp),%rax
  mov    (%rax),%rdi
  mov    $0x0,%eax
  call   <xrealloc@plt>
  cltq
  mov    0x70(%rsp),%rdi
  mov    %rax,(%rdi)
  jmp    L5
L21:
  add    %eax,%eax
  cmp    %edx,%eax
  cmovl  %edx,%eax
  mov    %eax,(%r14)
  cltq
  lea    0x0(,%rax,4),%rsi
  mov    0x10(%rsp),%r13
  mov    0x0(%r13),%rdi
  mov    $0x0,%eax
  call   <xrealloc@plt>
  cltq
  mov    %rax,0x0(%r13)
  movslq (%r14),%rsi
  shl    $0x3,%rsi
  mov    0x60(%rsp),%rax
  mov    (%rax),%rdi
  mov    $0x0,%eax
  call   <xrealloc@plt>
  cltq
  mov    0x60(%rsp),%rcx
  mov    %rax,(%rcx)
  jmp    L27
```

assistant: ```c
void addRow(int *nrRows, int *nrCapRows, int *nrNz, int *nrCapNz, int **nrStart, int **nrIdx, double **nrCoef, char **nrSense, double **nrRhs, int nz, const int idx[], const double coef[], char sense, double rhs, const char *rowName, char ***rowNames, int *nrLines, int *nrCap, int *nrChars, int *nrCharsCap) {
  if ((*nrRows) + 2 >= (*nrCapRows)) {
    (*nrCapRows) = ((2 * (*nrCapRows)) > ((*nrCapRows) + 32) ? (2 * (*nrCapRows)) : ((*nrCapRows) + 32));
    (*nrStart) = xrealloc((*nrStart), sizeof(int) * ((*nrCapRows) + 1));
    (*nrSense) = xrealloc((*nrSense), sizeof(char) * ((*nrCapRows)));
    (*nrRhs) = xrealloc((*nrRhs), sizeof(double) * (*nrCapRows));
  }
  if (((*nrNz) + nz) >= (*nrCapNz)) {
    (*nrCapNz) = (((*nrCapNz) * 2) > (((*nrNz) + nz)) ? ((*nrCapNz) * 2) : (((*nrNz) + nz)));
    (*nrIdx) = xrealloc((*nrIdx), sizeof(int) * (*nrCapNz));
    (*nrCoef) = xrealloc((*nrCoef), sizeof(double) * (*nrCapNz));
  }
  int *pidx = (*nrIdx) + (*nrNz);
  double *pcoef = (*nrCoef) + (*nrNz);
  memcpy(pidx, idx, sizeof(int) * nz);
  memcpy(pcoef, coef, sizeof(double) * nz);
  (*nrSense)[(*nrRows)] = sense;
  (*nrRhs)[(*nrRows)] = rhs;
  (*nrStart)[(*nrRows) + 1] = (*nrStart)[(*nrRows)] + nz;
  (*nrNz) += nz;
  addName(rowNames, nrLines, nrChars, nrCap, nrCharsCap, rowName);
  ++(*nrRows);
}
```