user: 这段汇编代码用C语言表示是什么样的？

```asm
<makeBMTable2>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  lea    -0x61000(%rsp),%r11
L78:
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  cmp    %r11,%rsp
  jne    L78
  sub    $0xad0,%rsp
  mov    %rdi,-0x61ab8(%rbp)
  mov    %esi,-0x61abc(%rbp)
  mov    %rdx,-0x61ac8(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x61a98(%rbp)
  jmp    L17
L133:
  mov    -0x61a98(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x61ac8(%rbp),%rax
  add    %rdx,%rax
  movl   $0xffffffff,(%rax)
  addl   $0x1,-0x61a98(%rbp)
L17:
  mov    -0x61a98(%rbp),%eax
  cmp    -0x61abc(%rbp),%eax
  jl     L133
  mov    -0x61abc(%rbp),%eax
  mov    %eax,-0x61aac(%rbp)
  cmpl   $0x0,-0x61aac(%rbp)
  je     L265
  movl   $0x0,-0x61aa4(%rbp)
  mov    -0x61aac(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x61aa8(%rbp)
  jmp    L281
L190:
  mov    -0x61aa8(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x61ab8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x61aac(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rcx
  mov    -0x61ab8(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  jne    L238
  mov    -0x61aa4(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x61aa4(%rbp)
  mov    -0x61aa8(%rbp),%edx
  sub    $0x1,%edx
  cltq
  mov    %edx,-0x61a90(%rbp,%rax,4)
  jmp    L48
L238:
  mov    -0x61aac(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x61ac8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0xffffffff,%eax
  jne    L48
  mov    -0x61aac(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x61ac8(%rbp),%rax
  add    %rax,%rdx
  mov    -0x61abc(%rbp),%eax
  sub    -0x61aa8(%rbp),%eax
  mov    %eax,(%rdx)
L48:
  subl   $0x1,-0x61aa8(%rbp)
L281:
  cmpl   $0x0,-0x61aa8(%rbp)
  jg     L190
  mov    -0x61aac(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x61ac8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0xffffffff,%eax
  jne    L11
  mov    -0x61aac(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x61ac8(%rbp),%rax
  add    %rax,%rdx
  mov    -0x61abc(%rbp),%eax
  mov    %eax,(%rdx)
L11:
  movl   $0x2,-0x61aa0(%rbp)
  subl   $0x1,-0x61aac(%rbp)
  jmp    L213
L5:
  movl   $0x0,-0x61a98(%rbp)
  jmp    L58
L18:
  mov    -0x61a98(%rbp),%eax
  cltq
  mov    -0x61a90(%rbp,%rax,4),%eax
  mov    %eax,-0x61aa8(%rbp)
  cmpl   $0x0,-0x61aa8(%rbp)
  je     L169
  mov    -0x61aa8(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x61ab8(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x61aac(%rbp),%eax
  cltq
  lea    -0x1(%rax),%rcx
  mov    -0x61ab8(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  je     L55
L169:
  mov    -0x61a98(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x61a94(%rbp)
  jmp    L276
L246:
  mov    -0x61a94(%rbp),%eax
  lea    -0x1(%rax),%ecx
  mov    -0x61a94(%rbp),%eax
  cltq
  mov    -0x61a90(%rbp,%rax,4),%edx
  movslq %ecx,%rax
  mov    %edx,-0x61a90(%rbp,%rax,4)
  addl   $0x1,-0x61a94(%rbp)
L276:
  mov    -0x61a94(%rbp),%eax
  cmp    -0x61aa4(%rbp),%eax
  jl     L246
  subl   $0x1,-0x61aa4(%rbp)
  mov    -0x61aac(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x61ac8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0xffffffff,%eax
  jne    L58
  mov    -0x61aa8(%rbp),%edx
  mov    -0x61aa0(%rbp),%eax
  add    %edx,%eax
  lea    -0x1(%rax),%ecx
  mov    -0x61aac(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x61ac8(%rbp),%rax
  add    %rdx,%rax
  mov    -0x61abc(%rbp),%edx
  sub    %ecx,%edx
  mov    %edx,(%rax)
  jmp    L58
L55:
  mov    -0x61a98(%rbp),%eax
  cltq
  mov    -0x61a90(%rbp,%rax,4),%eax
  lea    -0x1(%rax),%edx
  mov    -0x61a98(%rbp),%eax
  cltq
  mov    %edx,-0x61a90(%rbp,%rax,4)
  addl   $0x1,-0x61a98(%rbp)
L58:
  mov    -0x61a98(%rbp),%eax
  cmp    -0x61aa4(%rbp),%eax
  jl     L18
  cmpl   $0x0,-0x61aa4(%rbp)
  je     L326
  addl   $0x1,-0x61aa0(%rbp)
  subl   $0x1,-0x61aac(%rbp)
L213:
  cmpl   $0x0,-0x61aac(%rbp)
  jg     L5
  jmp    L321
L326:
  nop
L321:
  mov    -0x61abc(%rbp),%eax
  mov    %eax,-0x61aac(%rbp)
  movl   $0xffffffff,-0x61a9c(%rbp)
  jmp    L96
L20:
  subl   $0x1,-0x61aac(%rbp)
  mov    -0x61aac(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x61ac8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0xffffffff,%eax
  je     L70
  jmp    L96
L70:
  mov    -0x61abc(%rbp),%eax
  sub    -0x61aac(%rbp),%eax
  mov    %eax,-0x61aa0(%rbp)
  movl   $0x0,-0x61a98(%rbp)
  jmp    L23
L42:
  mov    -0x61aac(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x61a98(%rbp),%eax
  cltq
  add    %rax,%rdx
  mov    -0x61ab8(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x61aa0(%rbp),%edx
  mov    -0x61ab8(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  je     L191
  addl   $0x1,-0x61a98(%rbp)
  subl   $0x1,-0x61aa0(%rbp)
L23:
  cmpl   $0x0,-0x61aa0(%rbp)
  jg     L42
  jmp    L152
L191:
  nop
L152:
  mov    -0x61abc(%rbp),%eax
  sub    -0x61aa0(%rbp),%eax
  cmp    %eax,-0x61a9c(%rbp)
  je     L362
  mov    -0x61abc(%rbp),%eax
  sub    -0x61aa0(%rbp),%eax
  mov    %eax,-0x61a9c(%rbp)
  mov    -0x61aac(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x61ac8(%rbp),%rax
  add    %rax,%rdx
  mov    -0x61a9c(%rbp),%eax
  mov    %eax,(%rdx)
L96:
  cmpl   $0x1,-0x61aac(%rbp)
  jg     L20
  jmp    L316
L362:
  nop
  jmp    L316
L220:
  mov    -0x61aac(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x61ac8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0xffffffff,%eax
  jne    L358
  mov    -0x61aac(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x61ac8(%rbp),%rax
  add    %rax,%rdx
  mov    -0x61a9c(%rbp),%eax
  mov    %eax,(%rdx)
L358:
  subl   $0x1,-0x61aac(%rbp)
L316:
  cmpl   $0x0,-0x61aac(%rbp)
  jg     L220
  jmp    L217
L265:
  nop
L217:
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L102
  call   <__stack_chk_fail@plt>
L102:
  leave
  ret
```

assistant: ```c
void makeBMTable2(char *pattern, int patLen, int *bmTable) {
  int sIdx1;
  int sIdx0;
  int nextIdx[100000];
  int nextIdxSize;
  int sLen;
  int curIdx1;
  int i, j;
  for (i = 0; i < patLen; i++)
    bmTable[i] = -1;
  sIdx1 = patLen;
  if (sIdx1 == 0)
    return;
  for (nextIdxSize = 0, sIdx0 = sIdx1 - 1; sIdx0 > 0; --sIdx0) {
    if (pattern[sIdx0 - 1] == pattern[sIdx1 - 1]) {
      nextIdx[nextIdxSize++] = sIdx0 - 1;
    } else if (bmTable[sIdx1 - 1] == -1) {
      bmTable[sIdx1 - 1] = patLen - sIdx0;
    }
  }
  if (bmTable[sIdx1 - 1] == -1)
    bmTable[sIdx1 - 1] = patLen;
  sLen = 2;
  for (--sIdx1; sIdx1 > 0; --sIdx1) {
    for (i = 0; i < nextIdxSize;) {
      sIdx0 = nextIdx[i];
      if (sIdx0 == 0 || pattern[sIdx0 - 1] != pattern[sIdx1 - 1]) {
        for (j = i + 1; j < nextIdxSize; j++)
          nextIdx[j - 1] = nextIdx[j];
        --nextIdxSize;
        if (bmTable[sIdx1 - 1] == -1)
          bmTable[sIdx1 - 1] = patLen - (sIdx0 + sLen - 1);
      } else {
        --nextIdx[i];
        ++i;
      }
    }
    if (nextIdxSize == 0)
      break;
    ++sLen;
  }
  sIdx1 = patLen;
  curIdx1 = -1;
  while (sIdx1 > 1) {
    --sIdx1;
    if (bmTable[sIdx1 - 1] != -1)
      continue;
    sLen = patLen - sIdx1;
    i = 0;
    while (sLen > 0) {
      if (strncmp(pattern, pattern + sIdx1 + i, sLen) == 0)
        break;
      ++i;
      --sLen;
    }
    if (curIdx1 == patLen - sLen)
      break;
    bmTable[sIdx1 - 1] = curIdx1 = patLen - sLen;
  }
  while (sIdx1 > 0) {
    if (bmTable[sIdx1 - 1] == -1)
      bmTable[sIdx1 - 1] = curIdx1;
    --sIdx1;
  }
}
```