user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<IsAlpha>:
  endbr64
  sub    $0x8,%rsp
  test   %edi,%edi
  je     L740
  mov    %esi,%ecx
  and    $0xffffffdf,%ecx
  sub    $0x41,%ecx
  mov    $0x1,%eax
  cmp    $0x19,%ecx
  jbe    L211
  cmp    $0x12,%edi
  ja     L394
  mov    %edi,%edi
  lea    D3(%rip),%rcx
  movslq (%rcx,%rdi,4),%rax
  add    %rcx,%rax
  notrack jmp *%rax
L740:
  mov    %esi,%edi
  call   <isalpha@plt>
L211:
  add    $0x8,%rsp
  ret
  mov    $0x1,%eax
  cmp    $0xaa,%esi
  je     L211
  cmp    $0xd6,%esi
  jg     L236
  mov    $0x0,%eax
  cmp    $0xb4,%esi
  jle    L211
  lea    -0xb5(%rsi),%ecx
  movabs $0x3fffff821,%rax
  shr    %cl,%rax
  and    $0x1,%eax
  jmp    L211
L236:
  cmp    $0xf6,%esi
  jle    L683
  lea    -0xf8(%rsi),%edx
  cmp    $0x7,%edx
  setbe  %al
  movzbl %al,%eax
  jmp    L211
L683:
  cmp    $0xd7,%esi
  setg   %al
  movzbl %al,%eax
  jmp    L211
  mov    %esi,%ecx
  and    $0xfffffffd,%ecx
  mov    $0x1,%eax
  cmp    $0xa1,%ecx
  je     L211
  cmp    $0xd6,%esi
  jg     L435
  mov    $0x0,%eax
  cmp    $0xa4,%esi
  jle    L211
  lea    -0xa5(%rsi),%ecx
  movabs $0x3fffffef356f3,%rax
  shr    %cl,%rax
  and    $0x1,%eax
  jmp    L211
L435:
  cmp    $0xf6,%esi
  jg     L455
  cmp    $0xd7,%esi
  setg   %al
  movzbl %al,%eax
  jmp    L211
L455:
  lea    -0xf8(%rsi),%edx
  cmp    $0x6,%edx
  setbe  %al
  movzbl %al,%eax
  jmp    L211
  mov    $0x1,%eax
  cmp    $0xa1,%esi
  je     L211
  cmp    $0xc2,%esi
  jg     L558
  mov    $0x0,%eax
  cmp    $0xa5,%esi
  jle    L211
  lea    -0xa6(%rsi),%ecx
  mov    $0x1e798a79,%eax
  shr    %cl,%rax
  and    $0x1,%eax
  jmp    L211
L558:
  lea    -0xc4(%rsi),%ecx
  movabs $0x7f7efff7ff7efff,%rax
  shr    %cl,%rax
  and    $0x1,%eax
  cmp    $0x3a,%ecx
  jbe    L211
  mov    $0x0,%eax
  jmp    L211
  lea    -0xa1(%rsi),%ecx
  mov    $0x1,%eax
  cmp    $0x2,%ecx
  jbe    L211
  cmp    $0xd6,%esi
  jg     L239
  mov    $0x0,%eax
  cmp    $0xa4,%esi
  jle    L211
  lea    -0xa5(%rsi),%ecx
  movabs $0x3fffffff352f3,%rax
  shr    %cl,%rax
  and    $0x1,%eax
  jmp    L211
L239:
  cmp    $0xf6,%esi
  jg     L364
  cmp    $0xd7,%esi
  setg   %al
  movzbl %al,%eax
  jmp    L211
L364:
  lea    -0xf8(%rsi),%edx
  cmp    $0x6,%edx
  setbe  %al
  movzbl %al,%eax
  jmp    L211
  lea    -0xa1(%rsi),%eax
  cmp    $0x2e,%eax
  ja     L347
  mov    $0x1,%eax
  cmp    $0xad,%esi
  jne    L211
L347:
  cmp    $0xf0,%esi
  setne  %cl
  cmp    $0xfd,%esi
  setne  %al
  and    %eax,%ecx
  lea    -0xd0(%rsi),%edx
  cmp    $0x2f,%edx
  setbe  %al
  movzbl %al,%eax
  and    %ecx,%eax
  jmp    L211
  lea    -0xc1(%rsi),%ecx
  mov    $0x1,%eax
  cmp    $0x19,%ecx
  jbe    L211
  lea    -0xe0(%rsi),%edx
  cmp    $0x12,%edx
  setbe  %al
  movzbl %al,%eax
  jmp    L211
  lea    -0xb6(%rsi),%ecx
  cmp    $0xa,%ecx
  ja     L238
  mov    $0x1,%eax
  mov    $0x75d,%edx
  bt     %rcx,%rdx
  jb     L211
L238:
  lea    -0xc1(%rsi),%eax
  cmp    $0x1a,%eax
  ja     L200
  mov    $0x1,%eax
  cmp    $0xd2,%esi
  jne    L211
L200:
  lea    -0xdc(%rsi),%edx
  cmp    $0x22,%edx
  setbe  %al
  movzbl %al,%eax
  jmp    L211
  mov    $0x1,%eax
  cmp    $0xb5,%esi
  je     L211
  lea    -0xe0(%rsi),%edx
  cmp    $0x1a,%edx
  setbe  %al
  movzbl %al,%eax
  jmp    L211
  lea    -0xa1(%rsi),%ecx
  cmp    $0x1b,%ecx
  ja     L445
  mov    $0x1,%eax
  mov    $0xfbf6fbf,%edx
  bt     %rcx,%rdx
  jb     L211
L445:
  lea    -0xbe(%rsi),%edx
  cmp    $0x41,%edx
  setbe  %al
  movzbl %al,%eax
  jmp    L211
  lea    -0xa1(%rsi),%ecx
  mov    $0x1,%eax
  cmp    $0x39,%ecx
  jbe    L211
  lea    -0xdf(%rsi),%edx
  cmp    $0x1c,%edx
  setbe  %al
  movzbl %al,%eax
  jmp    L211
  mov    $0x1,%eax
  cmp    $0xa8,%esi
  je     L211
  cmp    $0xd6,%esi
  jg     L583
  mov    $0x0,%eax
  cmp    $0xa9,%esi
  jle    L211
  lea    -0xaa(%rsi),%ecx
  movabs $0x1fffffe14821,%rax
  shr    %cl,%rax
  and    $0x1,%eax
  jmp    L211
L583:
  cmp    $0xf6,%esi
  jle    L50
  lea    -0xf8(%rsi),%edx
  cmp    $0x6,%edx
  setbe  %al
  movzbl %al,%eax
  jmp    L211
L50:
  cmp    $0xd7,%esi
  setg   %al
  movzbl %al,%eax
  jmp    L211
  lea    -0xa1(%rsi),%ecx
  mov    $0x1,%eax
  cmp    $0x1,%ecx
  jbe    L211
  cmp    $0xb5,%esi
  jg     L716
  mov    $0x0,%eax
  cmp    $0xa3,%esi
  jle    L211
  lea    -0xa4(%rsi),%ecx
  mov    $0x3f9d7,%eax
  shr    %cl,%rax
  and    $0x1,%eax
  jmp    L211
L716:
  lea    -0xb7(%rsi),%edx
  cmp    $0x48,%edx
  setbe  %al
  movzbl %al,%eax
  jmp    L211
  mov    $0x1,%eax
  cmp    $0xaa,%esi
  je     L211
  cmp    $0xd6,%esi
  jg     L26
  mov    $0x0,%eax
  cmp    $0xa5,%esi
  jle    L211
  lea    -0xa6(%rsi),%ecx
  movabs $0x1fffffdd4c005,%rax
  shr    %cl,%rax
  and    $0x1,%eax
  jmp    L211
L26:
  cmp    $0xf6,%esi
  jle    L155
  lea    -0xf8(%rsi),%edx
  cmp    $0x7,%edx
  setbe  %al
  movzbl %al,%eax
  jmp    L211
L155:
  cmp    $0xd7,%esi
  setg   %al
  movzbl %al,%eax
  jmp    L211
  mov    $0x1,%eax
  cmp    $0xa1,%esi
  je     L211
  cmp    $0xba,%esi
  jg     L425
  cmp    $0xa1,%esi
  jle    L532
  lea    -0xa2(%rsi),%ecx
  mov    $0x1c73553,%eax
  shr    %cl,%rax
  and    $0x1,%eax
  jmp    L211
L425:
  lea    -0xbc(%rsi),%edx
  cmp    $0x43,%edx
  setbe  %al
  movzbl %al,%eax
  jmp    L211
  mov    %esi,%ecx
  and    $0xffffffef,%ecx
  mov    $0x1,%eax
  cmp    $0xa3,%ecx
  je     L211
  lea    -0xc0(%rsi),%edx
  cmp    $0x3f,%edx
  setbe  %al
  movzbl %al,%eax
  jmp    L211
L394:
  mov    $0xffffffff,%edi
  call   <exit@plt>
  mov    $0x0,%eax
  jmp    L211
L532:
  mov    $0x0,%eax
  jmp    L211
```

assistant: ```c
int IsAlpha(int enc, int c) {
  if (enc == 0)
    return isalpha(c);
  if (c >= 0x41 && c <= 0x5a)
    return 1;
  if (c >= 0x61 && c <= 0x7a)
    return 1;
  switch (enc) {
  case 1:
  case 2:
  case 10:
    if (c == 0xaa)
      return 1;
    if (c == 0xb5)
      return 1;
    if (c == 0xba)
      return 1;
    if (c >= 0xc0 && c <= 0xd6)
      return 1;
    if (c >= 0xd8 && c <= 0xf6)
      return 1;
    if (c >= 0xf8 && c <= 0xff)
      return 1;
    break;
  case 3:
    if (c == 0xa1 || c == 0xa3)
      return 1;
    if (c == 0xa5 || c == 0xa6)
      return 1;
    if (c >= 0xa9 && c <= 0xac)
      return 1;
    if (c >= 0xae && c <= 0xaf)
      return 1;
    if (c == 0xb1 || c == 0xb3)
      return 1;
    if (c == 0xb5 || c == 0xb6)
      return 1;
    if (c >= 0xb9 && c <= 0xbc)
      return 1;
    if (c >= 0xbe && c <= 0xbf)
      return 1;
    if (c >= 0xc0 && c <= 0xd6)
      return 1;
    if (c >= 0xd8 && c <= 0xf6)
      return 1;
    if (c >= 0xf8 && c <= 0xfe)
      return 1;
    break;
  case 4:
    if (c == 0xa1)
      return 1;
    if (c == 0xa6)
      return 1;
    if (c >= 0xa9 && c <= 0xac)
      return 1;
    if (c == 0xaf)
      return 1;
    if (c == 0xb1)
      return 1;
    if (c == 0xb5 || c == 0xb6)
      return 1;
    if (c >= 0xb9 && c <= 0xbc)
      return 1;
    if (c == 0xbf)
      return 1;
    if (c >= 0xc0 && c <= 0xc2)
      return 1;
    if (c >= 0xc4 && c <= 0xcf)
      return 1;
    if (c >= 0xd1 && c <= 0xd6)
      return 1;
    if (c >= 0xd8 && c <= 0xe2)
      return 1;
    if (c >= 0xe4 && c <= 0xef)
      return 1;
    if (c >= 0xf1 && c <= 0xf6)
      return 1;
    if (c >= 0xf8 && c <= 0xfe)
      return 1;
    break;
  case 5:
    if (c >= 0xa1 && c <= 0xa3)
      return 1;
    if (c == 0xa5 || c == 0xa6)
      return 1;
    if (c >= 0xa9 && c <= 0xac)
      return 1;
    if (c == 0xae)
      return 1;
    if (c == 0xb1 || c == 0xb3)
      return 1;
    if (c == 0xb5 || c == 0xb6)
      return 1;
    if (c >= 0xb9 && c <= 0xbf)
      return 1;
    if (c >= 0xc0 && c <= 0xd6)
      return 1;
    if (c >= 0xd8 && c <= 0xf6)
      return 1;
    if (c >= 0xf8 && c <= 0xfe)
      return 1;
    break;
  case 6:
    if (c >= 0xa1 && c <= 0xcf && c != 0xad)
      return 1;
    if (c >= 0xd0 && c <= 0xff && c != 0xf0 && c != 0xfd)
      return 1;
    break;
  case 7:
    if (c >= 0xc1 && c <= 0xda)
      return 1;
    if (c >= 0xe0 && c <= 0xf2)
      return 1;
    break;
  case 8:
    if (c == 0xb6)
      return 1;
    if (c >= 0xb8 && c <= 0xba)
      return 1;
    if (c == 0xbc)
      return 1;
    if (c >= 0xbe && c <= 0xbf)
      return 1;
    if (c == 0xc0)
      return 1;
    if (c >= 0xc1 && c <= 0xdb && c != 0xd2)
      return 1;
    if (c >= 0xdc && c <= 0xfe)
      return 1;
    break;
  case 9:
    if (c == 0xb5)
      return 1;
    if (c >= 0xe0 && c <= 0xfa)
      return 1;
    break;
  case 11:
    if (c >= 0xa1 && c <= 0xa6)
      return 1;
    if (c >= 0xa8 && c <= 0xac)
      return 1;
    if (c == 0xae || c == 0xaf)
      return 1;
    if (c >= 0xb1 && c <= 0xb6)
      return 1;
    if (c >= 0xb8 && c <= 0xbc)
      return 1;
    if (c >= 0xbe && c <= 0xff)
      return 1;
    break;
  case 12:
    if (c >= 0xa1 && c <= 0xda)
      return 1;
    if (c >= 0xdf && c <= 0xfb)
      return 1;
    break;
  case 13:
    if (c == 0xa8)
      return 1;
    if (c == 0xaa)
      return 1;
    if (c == 0xaf)
      return 1;
    if (c == 0xb5)
      return 1;
    if (c == 0xb8)
      return 1;
    if (c == 0xba)
      return 1;
    if (c >= 0xbf && c <= 0xd6)
      return 1;
    if (c >= 0xd8 && c <= 0xf6)
      return 1;
    if (c >= 0xf8 && c <= 0xfe)
      return 1;
    break;
  case 14:
    if (c == 0xa1 || c == 0xa2)
      return 1;
    if (c == 0xa4 || c == 0xa5)
      return 1;
    if (c == 0xa6 || c == 0xa8)
      return 1;
    if (c >= 0xaa && c <= 0xac)
      return 1;
    if (c >= 0xaf && c <= 0xb5)
      return 1;
    if (c >= 0xb7 && c <= 0xff)
      return 1;
    break;
  case 15:
    if (c == 0xaa)
      return 1;
    if (c == 0xb5)
      return 1;
    if (c == 0xba)
      return 1;
    if (c >= 0xc0 && c <= 0xd6)
      return 1;
    if (c >= 0xd8 && c <= 0xf6)
      return 1;
    if (c >= 0xf8 && c <= 0xff)
      return 1;
    if (c == 0xa6)
      return 1;
    if (c == 0xa8)
      return 1;
    if (c == 0xb4)
      return 1;
    if (c == 0xb8)
      return 1;
    if (c == 0xbc)
      return 1;
    if (c == 0xbd)
      return 1;
    if (c == 0xbe)
      return 1;
    break;
  case 16:
    if (c == 0xa1)
      return 1;
    if (c == 0xa2)
      return 1;
    if (c == 0xa3)
      return 1;
    if (c == 0xa6)
      return 1;
    if (c == 0xa8)
      return 1;
    if (c == 0xaa)
      return 1;
    if (c == 0xac)
      return 1;
    if (c == 0xae)
      return 1;
    if (c == 0xaf)
      return 1;
    if (c == 0xb2)
      return 1;
    if (c == 0xb3)
      return 1;
    if (c == 0xb4)
      return 1;
    if (c >= 0xb8 && c <= 0xba)
      return 1;
    if (c == 0xbc)
      return 1;
    if (c == 0xbd)
      return 1;
    if (c == 0xbe)
      return 1;
    if (c == 0xbf)
      return 1;
    if (c >= 0xc0 && c <= 0xde)
      return 1;
    if (c >= 0xdf && c <= 0xff)
      return 1;
    break;
  case 18:
    if (c == 0xa3 || c == 0xb3)
      return 1;
  case 17:
    if (c >= 0xc0 && c <= 0xff)
      return 1;
    break;
  default:
    exit(-1);
  }
  return 0;
}
```