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

```asm
<ISORegexp__test_cclass>:
  endbr64
  push   %rbx
  mov    %r9d,%ebx
  cmp    $0x9,%esi
  ja     L185
  mov    %edx,%eax
  mov    %ecx,%edx
  mov    %esi,%esi
  lea    D2(%rip),%r9
  movslq (%r9,%rsi,4),%rcx
  add    %r9,%rcx
  notrack jmp *%rcx
  cmp    %edx,%eax
  jle    L276
  mov    $0x0,%eax
  jmp    L177
  cmpb   $0x0,(%rdi)
  setne  %al
  movzbl %al,%eax
L177:
  mov    %eax,%edx
  xor    $0x1,%eax
  test   %ebx,%ebx
  cmove  %edx,%eax
  pop    %rbx
  ret
  movsbl (%rdi),%edi
  call   <isdigit@plt>
  test   %eax,%eax
  setne  %al
  movzbl %al,%eax
  jmp    L177
  movsbl (%rdi),%edi
  call   <ISORegexp__white_space@plt>
  test   %eax,%eax
  setne  %al
  movzbl %al,%eax
  jmp    L177
  cmpb   $0x9,(%rdi)
  sete   %al
  movzbl %al,%eax
  jmp    L177
  movsbl (%rdi),%edi
  call   <ISORegexp__white_space@plt>
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  jmp    L177
  movsbl (%rdi),%edi
  call   <ISORegexp__identifier_char@plt>
  test   %eax,%eax
  setne  %al
  movzbl %al,%eax
  jmp    L177
  movzbl (%rdi),%edx
  cmp    $0x2d,%dl
  je     L2
  cmp    $0x5f,%dl
  je     L2
  lea    -0x61(%rdx),%ecx
  mov    $0x1,%eax
  cmp    $0x19,%cl
  jbe    L177
  sub    $0x30,%edx
  cmp    $0x9,%dl
  setbe  %al
  movzbl %al,%eax
  jmp    L177
  movzbl (%rdi),%edx
  lea    -0x2d(%rdx),%eax
  cmp    $0x32,%al
  ja     L30
  movabs $0x4000000002001,%rcx
  bt     %rax,%rcx
  jae    L178
  mov    $0x1,%eax
  jmp    L177
L243:
  movsbl 0x2(%r8,%rcx,1),%r9d
  add    $0x2,%eax
  jmp    L128
L275:
  mov    %esi,%r9d
L128:
  movsbl (%rdi),%ecx
  cmp    %ecx,%esi
  jg     L171
  cmp    %ecx,%r9d
  jge    L141
L171:
  add    $0x1,%eax
  cmp    %eax,%edx
  jl     L9
L276:
  movslq %eax,%rcx
  movsbl (%r8,%rcx,1),%esi
  lea    0x1(%rax),%r9d
  cmp    %edx,%r9d
  jge    L275
  cmpb   $0x2d,0x1(%r8,%rcx,1)
  je     L243
  movsbl (%rdi),%eax
  cmp    %eax,%esi
  je     L252
  mov    %r9d,%eax
  jmp    L276
L185:
  mov    $0x0,%eax
  jmp    L177
L2:
  mov    $0x1,%eax
  jmp    L177
L141:
  mov    $0x1,%eax
  jmp    L177
L9:
  mov    $0x0,%eax
  jmp    L177
L252:
  mov    $0x1,%eax
  jmp    L177
L30:
  lea    -0x61(%rdx),%ecx
  mov    $0x1,%eax
  cmp    $0x19,%cl
  jbe    L177
L178:
  sub    $0x30,%edx
  cmp    $0x9,%dl
  setbe  %al
  movzbl %al,%eax
  jmp    L177
```

assistant: ```c
int ISORegexp__test_cclass(char *text, int chcl, int range_from, int range_to, char *drawn_from, int reverse) {
  int match = 0;
  switch (chcl) {
  case 1:
    if (text[0])
      match = 1;
    break;
  case 2:
    if (isdigit(text[0]))
      match = 1;
    break;
  case 3:
    if (ISORegexp__white_space(text[0]))
      match = 1;
    break;
  case 9:
    if (text[0] == '\t')
      match = 1;
    break;
  case 4:
    if (!(ISORegexp__white_space(text[0])))
      match = 1;
    break;
  case 5:
    if (ISORegexp__identifier_char(text[0]))
      match = 1;
    break;
  case 6:
    if ((text[0] == '-') || (text[0] == '_') || ((text[0] >= 'a') && (text[0] <= 'z')) || ((text[0] >= '0') && (text[0] <= '9')))
      match = 1;
    break;
  case 7:
    if ((text[0] == '-') || (text[0] == '_') || (text[0] == ':') || ((text[0] >= 'a') && (text[0] <= 'z')) || ((text[0] >= '0') && (text[0] <= '9')))
      match = 1;
    break;
  case 8:
    for (int j = range_from; j <= range_to; j++) {
      int c1 = drawn_from[j], c2 = c1;
      if ((j + 1 < range_to) && (drawn_from[j + 1] == '-')) {
        c2 = drawn_from[j + 2];
        j += 2;
      }
      int c = *text;
      if ((c >= c1) && (c <= c2)) {
        match = 1;
        break;
      }
    }
    break;
  }
  if (reverse)
    match = (match) ? 0 : 1;
  return match;
}
```