user: 下面的汇编指令对应的C源代码是什么：

```asm
<LMSpostproc1>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    %edx,-0x44(%rbp)
  mov    %ecx,-0x48(%rbp)
  mov    %r8d,-0x4c(%rbp)
  cmpl   $0x0,-0x44(%rbp)
  setg   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  movl   $0x0,-0x28(%rbp)
  jmp    L244
L323:
  mov    -0x28(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    -0xc(%rbp),%edx
  not    %edx
  mov    %edx,(%rax)
  mov    -0x28(%rbp),%eax
  add    $0x1,%eax
  cmp    %eax,-0x44(%rbp)
  setg   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  addl   $0x1,-0x28(%rbp)
L244:
  mov    -0x28(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0xc(%rbp)
  cmpl   $0x0,-0xc(%rbp)
  js     L323
  mov    -0x28(%rbp),%eax
  cmp    -0x48(%rbp),%eax
  jge    L205
  mov    -0x28(%rbp),%eax
  mov    %eax,-0x24(%rbp)
  addl   $0x1,-0x28(%rbp)
L91:
  mov    -0x28(%rbp),%eax
  cmp    -0x44(%rbp),%eax
  setl   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x28(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0xc(%rbp)
  cmpl   $0x0,-0xc(%rbp)
  jns    L156
  mov    -0x24(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x24(%rbp)
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    -0xc(%rbp),%edx
  not    %edx
  mov    %edx,(%rax)
  mov    -0x28(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  movl   $0x0,(%rax)
  mov    -0x24(%rbp),%eax
  cmp    -0x48(%rbp),%eax
  je     L300
L156:
  addl   $0x1,-0x28(%rbp)
  jmp    L91
L300:
  nop
L205:
  mov    -0x44(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x44(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x24(%rbp)
  cmpl   $0x4,-0x4c(%rbp)
  jne    L52
  mov    -0x44(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  jmp    L224
L52:
  mov    -0x44(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
L224:
  mov    %eax,-0x14(%rbp)
L124:
  mov    -0x14(%rbp),%eax
  mov    %eax,-0x8(%rbp)
  subl   $0x1,-0x28(%rbp)
  cmpl   $0x0,-0x28(%rbp)
  js     L4
  cmpl   $0x4,-0x4c(%rbp)
  jne    L2
  mov    -0x28(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  jmp    L17
L2:
  mov    -0x28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
L17:
  mov    %eax,-0x14(%rbp)
  mov    -0x14(%rbp),%eax
  cmp    -0x8(%rbp),%eax
  jge    L124
  jmp    L4
L1:
  mov    -0x14(%rbp),%eax
  mov    %eax,-0x8(%rbp)
  subl   $0x1,-0x28(%rbp)
  cmpl   $0x0,-0x28(%rbp)
  js     L93
  cmpl   $0x4,-0x4c(%rbp)
  jne    L145
  mov    -0x28(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  jmp    L214
L145:
  mov    -0x28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
L214:
  mov    %eax,-0x14(%rbp)
  mov    -0x14(%rbp),%eax
  cmp    -0x8(%rbp),%eax
  jle    L1
L93:
  cmpl   $0x0,-0x28(%rbp)
  js     L4
  mov    -0x28(%rbp),%eax
  add    $0x1,%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x40(%rbp),%rax
  add    %rax,%rdx
  mov    -0x24(%rbp),%eax
  sub    -0x28(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x28(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x24(%rbp)
L21:
  mov    -0x14(%rbp),%eax
  mov    %eax,-0x8(%rbp)
  subl   $0x1,-0x28(%rbp)
  cmpl   $0x0,-0x28(%rbp)
  js     L4
  cmpl   $0x4,-0x4c(%rbp)
  jne    L353
  mov    -0x28(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  jmp    L175
L353:
  mov    -0x28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
L175:
  mov    %eax,-0x14(%rbp)
  mov    -0x14(%rbp),%eax
  cmp    -0x8(%rbp),%eax
  jge    L21
L4:
  cmpl   $0x0,-0x28(%rbp)
  jns    L1
  movl   $0x0,-0x28(%rbp)
  movl   $0x0,-0x18(%rbp)
  mov    -0x44(%rbp),%eax
  mov    %eax,-0x20(%rbp)
  movl   $0x0,-0x1c(%rbp)
  jmp    L221
L104:
  mov    -0x28(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0xc(%rbp)
  mov    -0xc(%rbp),%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x4(%rbp)
  movl   $0x1,-0x10(%rbp)
  mov    -0x4(%rbp),%eax
  cmp    -0x1c(%rbp),%eax
  jne    L349
  mov    -0x20(%rbp),%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  cmp    %eax,-0x44(%rbp)
  jle    L349
  movl   $0x0,-0x24(%rbp)
  jmp    L280
L74:
  addl   $0x1,-0x24(%rbp)
L280:
  mov    -0x24(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jge    L9
  cmpl   $0x4,-0x4c(%rbp)
  jne    L19
  mov    -0xc(%rbp),%edx
  mov    -0x24(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  jmp    L339
L19:
  mov    -0xc(%rbp),%edx
  mov    -0x24(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
L339:
  cmpl   $0x4,-0x4c(%rbp)
  jne    L130
  mov    -0x20(%rbp),%ecx
  mov    -0x24(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x38(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  jmp    L152
L130:
  mov    -0x20(%rbp),%ecx
  mov    -0x24(%rbp),%eax
  add    %ecx,%eax
  movslq %eax,%rcx
  mov    -0x38(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
L152:
  cmp    %eax,%edx
  je     L74
L9:
  mov    -0x24(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jne    L349
  movl   $0x0,-0x10(%rbp)
L349:
  cmpl   $0x0,-0x10(%rbp)
  je     L25
  addl   $0x1,-0x18(%rbp)
  mov    -0xc(%rbp),%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x4(%rbp),%eax
  mov    %eax,-0x1c(%rbp)
L25:
  mov    -0xc(%rbp),%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x40(%rbp),%rax
  add    %rax,%rdx
  mov    -0x18(%rbp),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x28(%rbp)
L221:
  mov    -0x28(%rbp),%eax
  cmp    -0x48(%rbp),%eax
  jl     L104
  mov    -0x18(%rbp),%eax
  leave
  ret
```

assistant: ```c
int LMSpostproc1(const void *T, int *SA, int n, int m, int cs) {
  int i, j, p, q, plen, qlen, name;
  int c0, c1;
  int diff;
  assert(0 < n);
  for (i = 0; (p = SA[i]) < 0; ++i) {
    SA[i] = ~p;
    assert((i + 1) < n);
  }
  if (i < m) {
    for (j = i, ++i;; ++i) {
      assert(i < n);
      if ((p = SA[i]) < 0) {
        SA[j++] = ~p;
        SA[i] = 0;
        if (j == m) {
          break;
        }
      }
    }
  }
  i = n - 1;
  j = n - 1;
  c0 = (cs == sizeof(int) ? ((int *)T)[(n - 1)] : ((unsigned char *)T)[(n - 1)]);
  do {
    c1 = c0;
  } while ((0 <= --i) && ((c0 = (cs == sizeof(int) ? ((int *)T)[(i)] : ((unsigned char *)T)[(i)])) >= c1));
  for (; 0 <= i;) {
    do {
      c1 = c0;
    } while ((0 <= --i) && ((c0 = (cs == sizeof(int) ? ((int *)T)[(i)] : ((unsigned char *)T)[(i)])) <= c1));
    if (0 <= i) {
      SA[m + ((i + 1) >> 1)] = j - i;
      j = i + 1;
      do {
        c1 = c0;
      } while ((0 <= --i) && ((c0 = (cs == sizeof(int) ? ((int *)T)[(i)] : ((unsigned char *)T)[(i)])) >= c1));
    }
  }
  for (i = 0, name = 0, q = n, qlen = 0; i < m; ++i) {
    p = SA[i], plen = SA[m + (p >> 1)], diff = 1;
    if ((plen == qlen) && ((q + plen) < n)) {
      for (j = 0; (j < plen) && ((cs == sizeof(int) ? ((int *)T)[(p + j)] : ((unsigned char *)T)[(p + j)]) == (cs == sizeof(int) ? ((int *)T)[(q + j)] : ((unsigned char *)T)[(q + j)])); ++j) {
      }
      if (j == plen) {
        diff = 0;
      }
    }
    if (diff != 0) {
      ++name, q = p, qlen = plen;
    }
    SA[m + (p >> 1)] = name;
  }
  return name;
}
```