user: 请从给定的汇编指令推导出C源代码:

```asm
<_glp_qmd_qmdupd>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x68,%rsp
  mov    0xa0(%rsp),%rax
  mov    %rsi,0x8(%rsp)
  mov    %r9,0x10(%rsp)
  mov    0xa8(%rsp),%rbx
  mov    %rax,0x38(%rsp)
  mov    0xb0(%rsp),%rax
  mov    0xb8(%rsp),%r15
  mov    %rax,0x30(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0x58(%rsp)
  xor    %eax,%eax
  mov    (%rdx),%eax
  test   %eax,%eax
  jle    L121
  lea    0x4(%rsi),%rax
  mov    %rdx,0x18(%rsp)
  mov    %rdi,%r12
  xor    %edi,%edi
  mov    %rax,0x28(%rsp)
  mov    %r8,%rbp
  xor    %r10d,%r10d
  xor    %r8d,%r8d
  mov    %rcx,0x20(%rsp)
  mov    $0x1,%r9d
  mov    %edi,%r14d
  movl   $0x0,0x48(%rsp)
  movl   $0x0,0x4c(%rsp)
  nopw   0x0(%rax,%rax,1)
L63:
  mov    0x20(%rsp),%rax
  mov    0x10(%rsp),%rdi
  movslq (%rax,%r9,4),%rax
  mov    (%r12,%rax,4),%ecx
  mov    0x4(%r12,%rax,4),%edx
  mov    %rax,%r11
  add    (%rdi,%rax,4),%r10d
  mov    %r10d,%r13d
  cmp    %ecx,%edx
  jle    L86
  sub    %ecx,%edx
  movslq %ecx,%rsi
  mov    0x8(%rsp),%rax
  mov    0x28(%rsp),%rdi
  sub    $0x1,%edx
  add    %rsi,%rdx
  lea    (%rax,%rsi,4),%rax
  lea    (%rdi,%rdx,4),%rdi
  nopw   0x0(%rax,%rax,1)
L7:
  movslq (%rax),%rdx
  lea    (%rbx,%rdx,4),%rsi
  mov    %rdx,%rcx
  cmpl   $0x0,(%rsi)
  jne    L98
  mov    0x0(%rbp,%rdx,4),%edx
  test   %edx,%edx
  jns    L98
  add    $0x1,%r8d
  movl   $0xffffffff,(%rsi)
  mov    $0x1,%r14d
  movslq %r8d,%rdx
  mov    %ecx,(%r15,%rdx,4)
L98:
  add    $0x4,%rax
  cmp    %rax,%rdi
  jne    L7
L86:
  mov    0x18(%rsp),%rax
  add    $0x1,%r9
  mov    (%rax),%eax
  cmp    %r9d,%eax
  jge    L63
  mov    %r13d,%edi
  mov    %r14d,%esi
  mov    %r11d,0x50(%rsp)
  mov    0x20(%rsp),%r14
  mov    %edi,0x48(%rsp)
  mov    0x18(%rsp),%r13
  test   %sil,%sil
  je     L16
  mov    %r8d,0x4c(%rsp)
  test   %r8d,%r8d
  je     L16
  movslq %r8d,%r8
  sub    $0x8,%rsp
  mov    %rbx,%r9
  mov    %rbp,%rdx
  lea    0x4(%r15,%r8,4),%rax
  mov    %r12,%rdi
  push   %rax
  push   0x40(%rsp)
  push   %r15
  lea    0x6c(%rsp),%rax
  push   %rax
  lea    0x70(%rsp),%rax
  push   %rax
  mov    0x68(%rsp),%r8
  mov    0x40(%rsp),%rcx
  mov    0x38(%rsp),%rsi
  call   <_glp_qmd_qmdmrg@plt>
  mov    0x0(%r13),%eax
  add    $0x30,%rsp
L16:
  test   %eax,%eax
  jle    L121
  mov    $0x1,%r10d
  mov    %r15,%rax
  mov    %r12,%rsi
  mov    %rbp,%r15
  mov    0x10(%rsp),%r12
  mov    %rbx,%rbp
  lea    0x54(%rsp),%r9
  mov    %r10,%rbx
  mov    %rax,%r10
  jmp    L183
  nopl   0x0(%rax,%rax,1)
L125:
  add    $0x1,%rbx
  cmp    %ebx,0x0(%r13)
  jl     L121
L183:
  movslq (%r14,%rbx,4),%rax
  mov    %eax,0x50(%rsp)
  lea    0x0(%rbp,%rax,4),%rax
  cmpl   $0x1,(%rax)
  ja     L125
  lea    0x50(%rsp),%rdi
  sub    $0x8,%rsp
  movl   $0x2,(%rax)
  mov    %r15,%rcx
  push   %r10
  mov    %rbp,%r8
  lea    0x5c(%rsp),%rax
  mov    %r10,0x30(%rsp)
  push   %rax
  push   0x48(%rsp)
  mov    0x28(%rsp),%rdx
  mov    %r9,0x38(%rsp)
  mov    %rsi,0x30(%rsp)
  call   <_glp_qmd_qmdrch@plt>
  mov    0x74(%rsp),%ecx
  mov    0x68(%rsp),%edx
  add    $0x20,%rsp
  mov    0x10(%rsp),%rsi
  mov    0x18(%rsp),%r9
  test   %ecx,%ecx
  mov    0x20(%rsp),%r10
  jg     L96
L47:
  movslq 0x50(%rsp),%rax
  sub    $0x1,%edx
  mov    %edx,(%r15,%rax,4)
  mov    0x4c(%rsp),%edx
  test   %edx,%edx
  jle    L125
  sub    $0x1,%edx
  lea    0x4(%r10),%rax
  lea    0x8(%r10,%rdx,4),%rcx
  nopl   (%rax)
L149:
  movslq (%rax),%rdx
  add    $0x4,%rax
  movl   $0x0,0x0(%rbp,%rdx,4)
  cmp    %rax,%rcx
  jne    L149
  add    $0x1,%rbx
  cmp    %ebx,0x0(%r13)
  jge    L183
  nopw   0x0(%rax,%rax,1)
L121:
  mov    0x58(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L189
  add    $0x68,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L96:
  mov    0x30(%rsp),%rdi
  sub    $0x1,%ecx
  lea    0x4(%rdi),%rax
  lea    0x8(%rdi,%rcx,4),%rdi
  nopl   0x0(%rax,%rax,1)
L12:
  movslq (%rax),%rcx
  add    $0x4,%rax
  add    (%r12,%rcx,4),%edx
  movl   $0x0,0x0(%rbp,%rcx,4)
  cmp    %rax,%rdi
  jne    L12
  jmp    L47
L189:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void _glp_qmd_qmdupd(int xadj[], int adjncy[], int *_nlist, int list[], int deg[], int qsize[], int qlink[], int marker[], int rchset[], int nbrhd[]) {
  int deg0, deg1, il, inhd, inode, irch, j, jstop, jstrt, mark, nabor, nhdsze, node, rchsze;
  if ((*_nlist) <= 0)
    return;
  deg0 = 0;
  nhdsze = 0;
  for (il = 1; il <= (*_nlist); il++) {
    node = list[il];
    deg0 += qsize[node];
    jstrt = xadj[node];
    jstop = xadj[node + 1] - 1;
    for (j = jstrt; j <= jstop; j++) {
      nabor = adjncy[j];
      if (marker[nabor] == 0 && deg[nabor] < 0) {
        marker[nabor] = -1;
        nhdsze++;
        nbrhd[nhdsze] = nabor;
      }
    }
  }
  if (nhdsze > 0)
    _glp_qmd_qmdmrg(xadj, adjncy, deg, qsize, qlink, marker, &deg0, &nhdsze, nbrhd, rchset, &nbrhd[nhdsze + 1]);
  for (il = 1; il <= (*_nlist); il++) {
    node = list[il];
    mark = marker[node];
    if (mark == 0 || mark == 1) {
      marker[node] = 2;
      _glp_qmd_qmdrch(&node, xadj, adjncy, deg, marker, &rchsze, rchset, &nhdsze, nbrhd);
      deg1 = deg0;
      if (rchsze > 0) {
        for (irch = 1; irch <= rchsze; irch++) {
          inode = rchset[irch];
          deg1 += qsize[inode];
          marker[inode] = 0;
        }
      }
      deg[node] = deg1 - 1;
      if (nhdsze > 0) {
        for (inhd = 1; inhd <= nhdsze; inhd++) {
          inode = nbrhd[inhd];
          marker[inode] = 0;
        }
      }
    }
  }
  return;
}
```