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

```asm
<cmp_barker>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x38,%rsp
  mov    %rdi,%r13
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  mov    $0x0,%ebx
  mov    $0x0,%ebp
  lea    D8(%rip),%r12
  jmp    L57
  lea    0x1c(%rsp),%rdi
  mov    $0x4,%r8d
  mov    %r13,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L373
  add    $0x1,%ebp
  testl  $0xfff8,0x1c(%rsp)
  sete   %bl
  movzbl %bl,%ebx
L454:
  cmp    $0x3a97,%ebp
  jg     L142
L57:
  cmp    $0x5,%ebx
  ja     L255
  mov    %ebx,%eax
  movslq (%r12,%rax,4),%rax
  add    %r12,%rax
  notrack jmp *%rax
  lea    0x1c(%rsp),%rdi
  mov    $0x4,%r8d
  mov    %r13,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L273
  add    $0x1,%ebp
  testl  $0xfff8,0x1c(%rsp)
  sete   %bl
  movzbl %bl,%ebx
  add    %ebx,%ebx
  jmp    L454
  lea    0x1c(%rsp),%rdi
  mov    $0x4,%r8d
  mov    %r13,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L297
  add    $0x1,%ebp
  mov    0x1c(%rsp),%eax
  and    $0xfff8,%eax
  cmp    $0x1,%eax
  sbb    %ebx,%ebx
  and    $0x3,%ebx
  jmp    L454
  lea    0x1c(%rsp),%rdi
  mov    $0x4,%r8d
  mov    %r13,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L650
  add    $0x1,%ebp
  testl  $0xfff8,0x1c(%rsp)
  sete   %bl
  movzbl %bl,%ebx
  shl    $0x2,%ebx
  jmp    L454
  lea    0x1c(%rsp),%rdi
  mov    $0x4,%r8d
  mov    %r13,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L155
  add    $0x1,%ebp
  mov    0x1c(%rsp),%eax
  and    $0xfff8,%eax
  cmp    $0x1,%eax
  sbb    %ebx,%ebx
  and    $0x5,%ebx
  jmp    L454
  lea    0x1c(%rsp),%rdi
  mov    $0x4,%r8d
  mov    %r13,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L458
  add    $0x1,%ebp
  mov    0x1c(%rsp),%eax
  test   $0xfff8,%eax
  je     L454
  or     $0xffff0007,%eax
  mov    %ebp,%r14d
  cmp    $0xffffffff,%eax
  jne    L452
L665:
  lea    0x1c(%rsp),%rdi
  mov    $0x4,%r8d
  mov    %r13,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  call   <fread_bo@plt>
  mov    %eax,%ebx
  cmp    $0x1,%eax
  jne    L232
  lea    0x1(%r14),%ebp
  mov    0x1c(%rsp),%eax
  test   $0xfff8,%eax
  je     L454
  or     $0xffff0007,%eax
  mov    $0x0,%ebx
  cmp    $0xffffffff,%eax
  jne    L454
  lea    0x1c(%rsp),%rdi
  mov    $0x4,%r8d
  mov    %r13,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  call   <fread_bo@plt>
  mov    %eax,%ebx
  cmp    $0x1,%eax
  jne    L300
  lea    0x2(%r14),%ebp
  mov    0x1c(%rsp),%eax
  test   $0xfff8,%eax
  je     L454
  or     $0xffff0007,%eax
  mov    $0x0,%ebx
  cmp    $0xffffffff,%eax
  jne    L454
  lea    0x1c(%rsp),%rdi
  mov    $0x4,%r8d
  mov    %r13,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L479
  mov    0x1c(%rsp),%ebx
  and    $0xfff8,%ebx
  je     L340
  lea    0x3(%r14),%ebp
  mov    $0x0,%ebx
  jmp    L454
L255:
  mov    %ebp,%r14d
  jmp    L665
L340:
  lea    0x1c(%rsp),%rdi
  mov    $0x4,%r8d
  mov    %r13,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L354
  lea    0x4(%r14),%ebp
  mov    0x1c(%rsp),%eax
  test   $0xfff8,%eax
  je     L459
  or     $0xffff0007,%eax
  cmp    $0xffffffff,%eax
  jne    L454
  lea    0x1c(%rsp),%rdi
  mov    $0x4,%r8d
  mov    %r13,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L284
  mov    0x1c(%rsp),%r15d
  and    $0xfff8,%r15d
  lea    0x5(%r14),%ebp
  jne    L454
  lea    0x1c(%rsp),%rdi
  mov    $0x4,%r8d
  mov    %r13,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L470
  mov    0x1c(%rsp),%ebx
  and    $0xfff8,%ebx
  je     L201
  lea    0x6(%r14),%ebp
  mov    %r15d,%ebx
  jmp    L454
L201:
  lea    0x1c(%rsp),%rdi
  mov    $0x4,%r8d
  mov    %r13,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L713
  lea    0x7(%r14),%ebp
  mov    0x1c(%rsp),%eax
  test   $0xfff8,%eax
  je     L376
  or     $0xffff0007,%eax
  cmp    $0xffffffff,%eax
  jne    L454
  lea    0x1c(%rsp),%rdi
  mov    $0x4,%r8d
  mov    %r13,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L69
  mov    0x1c(%rsp),%eax
  and    $0xfff8,%eax
  mov    %eax,0xc(%rsp)
  lea    0x8(%r14),%ebp
  jne    L454
  lea    0x1c(%rsp),%rdi
  mov    $0x4,%r8d
  mov    %r13,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L619
  mov    0x1c(%rsp),%r15d
  and    $0xfff8,%r15d
  je     L107
  lea    0x9(%r14),%ebp
  mov    0xc(%rsp),%ebx
  jmp    L454
L107:
  lea    0x1c(%rsp),%rdi
  mov    $0x4,%r8d
  mov    %r13,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L714
  mov    0x1c(%rsp),%ebx
  and    $0xfff8,%ebx
  je     L144
  lea    0xa(%r14),%ebp
  mov    %r15d,%ebx
  jmp    L454
L144:
  lea    0x1c(%rsp),%rdi
  mov    $0x4,%r8d
  mov    %r13,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L732
  lea    0xb(%r14),%ebp
  mov    0x1c(%rsp),%eax
  test   $0xfff8,%eax
  je     L537
  or     $0xffff0007,%eax
  cmp    $0xffffffff,%eax
  jne    L454
  lea    0x1c(%rsp),%rdi
  mov    $0x4,%r8d
  mov    %r13,%rcx
  mov    $0x1,%edx
  mov    $0x4,%esi
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  jne    L617
  lea    0xc(%r14),%ebp
  mov    0x1c(%rsp),%edx
  test   $0xfff8,%edx
  je     L147
  or     $0xffff0007,%edx
  cmp    $0xffffffff,%edx
  jne    L454
  lea    0x20(%rsp),%rdi
  mov    $0x4,%r8d
  mov    %r13,%rcx
  mov    $0x1,%edx
  mov    $0x8,%esi
  call   <fread_bo@plt>
  cmp    $0x1,%eax
  mov    $0xfffffffe,%eax
  cmovne %eax,%ebx
  jmp    L509
L452:
  mov    $0x0,%ebx
  jmp    L454
L459:
  mov    $0x2,%ebx
  jmp    L454
L376:
  mov    $0x3,%ebx
  jmp    L454
L537:
  mov    $0x4,%ebx
  jmp    L454
L147:
  mov    %eax,%ebx
  jmp    L454
L142:
  mov    $0xffffffff,%ebx
L509:
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L329
  mov    %ebx,%eax
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L373:
  mov    $0xfffffffe,%ebx
  jmp    L509
L273:
  mov    $0xfffffffe,%ebx
  jmp    L509
L297:
  mov    $0xfffffffe,%ebx
  jmp    L509
L650:
  mov    $0xfffffffe,%ebx
  jmp    L509
L155:
  mov    $0xfffffffe,%ebx
  jmp    L509
L458:
  mov    $0xfffffffe,%ebx
  jmp    L509
L232:
  mov    $0xfffffffe,%ebx
  jmp    L509
L300:
  mov    $0xfffffffe,%ebx
  jmp    L509
L479:
  mov    $0xfffffffe,%ebx
  jmp    L509
L354:
  mov    $0xfffffffe,%ebx
  jmp    L509
L284:
  mov    $0xfffffffe,%ebx
  jmp    L509
L470:
  mov    $0xfffffffe,%ebx
  jmp    L509
L713:
  mov    $0xfffffffe,%ebx
  jmp    L509
L69:
  mov    $0xfffffffe,%ebx
  jmp    L509
L619:
  mov    $0xfffffffe,%ebx
  jmp    L509
L714:
  mov    $0xfffffffe,%ebx
  jmp    L509
L732:
  mov    $0xfffffffe,%ebx
  jmp    L509
L617:
  mov    $0xfffffffe,%ebx
  jmp    L509
L329:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
int cmp_barker(FILE *fp) {
  int word, ncount = 0, wsize = sizeof(int), buf[2], state = 0;
  while (ncount < 15000) {
    if (state == 0) {
      if (1 != fread_bo(&word, wsize, 1, fp, wsize))
        return (-2);
      ncount++;
      if ((word & 0x0000fff8) != 0x00000000) {
        state = 0;
        continue;
      } else {
        state = 1;
        continue;
      }
    }
    if (state == 1) {
      if (1 != fread_bo(&word, wsize, 1, fp, wsize))
        return (-2);
      ncount++;
      if ((word & 0x0000fff8) != 0x00000000) {
        state = 0;
        continue;
      } else {
        state = 2;
        continue;
      }
    }
    if (state == 2) {
      if (1 != fread_bo(&word, wsize, 1, fp, wsize))
        return (-2);
      ncount++;
      if ((word & 0x0000fff8) != 0x00000000) {
        state = 0;
        continue;
      } else {
        state = 3;
        continue;
      }
    }
    if (state == 3) {
      if (1 != fread_bo(&word, wsize, 1, fp, wsize))
        return (-2);
      ncount++;
      if ((word & 0x0000fff8) != 0x00000000) {
        state = 0;
        continue;
      } else {
        state = 4;
        continue;
      }
    }
    if (state == 4) {
      if (1 != fread_bo(&word, wsize, 1, fp, wsize))
        return (-2);
      ncount++;
      if ((word & 0x0000fff8) != 0x00000000) {
        state = 0;
        continue;
      } else {
        state = 5;
        continue;
      }
    }
    if (state == 5) {
      if (1 != fread_bo(&word, wsize, 1, fp, wsize))
        return (-2);
      ncount++;
      if ((word & 0x0000fff8) == 0x00000000) {
        state = 5;
        continue;
      } else if ((word | 0xffff0007) != 0xffffffff) {
        state = 0;
        continue;
      }
    }
    if (1 != fread_bo(&word, wsize, 1, fp, wsize))
      return (-2);
    ncount++;
    if ((word & 0x0000fff8) == 0x00000000) {
      state = 1;
      continue;
    } else if ((word | 0xffff0007) != 0xffffffff) {
      state = 0;
      continue;
    }
    if (1 != fread_bo(&word, wsize, 1, fp, wsize))
      return (-2);
    ncount++;
    if ((word & 0x0000fff8) == 0x00000000) {
      state = 1;
      continue;
    } else if ((word | 0xffff0007) != 0xffffffff) {
      state = 0;
      continue;
    }
    if (1 != fread_bo(&word, wsize, 1, fp, wsize))
      return (-2);
    ncount++;
    if ((word & 0x0000fff8) != 0x00000000) {
      state = 0;
      continue;
    }
    if (1 != fread_bo(&word, wsize, 1, fp, wsize))
      return (-2);
    ncount++;
    if ((word & 0x0000fff8) == 0x00000000) {
      state = 2;
      continue;
    } else if ((word | 0xffff0007) != 0xffffffff) {
      state = 0;
      continue;
    }
    if (1 != fread_bo(&word, wsize, 1, fp, wsize))
      return (-2);
    ncount++;
    if ((word & 0x0000fff8) != 0x00000000) {
      state = 0;
      continue;
    }
    if (1 != fread_bo(&word, wsize, 1, fp, wsize))
      return (-2);
    ncount++;
    if ((word & 0x0000fff8) != 0x00000000) {
      state = 0;
      continue;
    }
    if (1 != fread_bo(&word, wsize, 1, fp, wsize))
      return (-2);
    ncount++;
    if ((word & 0x0000fff8) == 0x00000000) {
      state = 3;
      continue;
    } else if ((word | 0xffff0007) != 0xffffffff) {
      state = 0;
      continue;
    }
    if (1 != fread_bo(&word, wsize, 1, fp, wsize))
      return (-2);
    ncount++;
    if ((word & 0x0000fff8) != 0x00000000) {
      state = 0;
      continue;
    }
    if (1 != fread_bo(&word, wsize, 1, fp, wsize))
      return (-2);
    ncount++;
    if ((word & 0x0000fff8) != 0x00000000) {
      state = 0;
      continue;
    }
    if (1 != fread_bo(&word, wsize, 1, fp, wsize))
      return (-2);
    ncount++;
    if ((word & 0x0000fff8) != 0x00000000) {
      state = 0;
      continue;
    }
    if (1 != fread_bo(&word, wsize, 1, fp, wsize))
      return (-2);
    ncount++;
    if ((word & 0x0000fff8) == 0x00000000) {
      state = 4;
      continue;
    } else if ((word | 0xffff0007) != 0xffffffff) {
      state = 0;
      continue;
    }
    if (1 != fread_bo(&word, wsize, 1, fp, wsize))
      return (-2);
    ncount++;
    if ((word & 0x0000fff8) == 0x00000000) {
      state = 1;
      continue;
    } else if ((word | 0xffff0007) != 0xffffffff) {
      state = 0;
      continue;
    }
    if (1 != fread_bo(buf, 2 * wsize, 1, fp, wsize))
      return (-2);
    return (0);
  }
  return (-1);
}
```