user: Demonstrate the C code that generates the assembly output below:

```asm
<ISORegexp__test_cclass>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %esi,-0x2c(%rbp)
  mov    %edx,-0x30(%rbp)
  mov    %ecx,-0x34(%rbp)
  mov    %r8,-0x40(%rbp)
  mov    %r9d,-0x38(%rbp)
  movl   $0x0,-0x14(%rbp)
  cmpl   $0x9,-0x2c(%rbp)
  ja     L148
  mov    -0x2c(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D4(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D4(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L172
  movl   $0x1,-0x14(%rbp)
  jmp    L172
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isdigit@plt>
  test   %eax,%eax
  je     L328
  movl   $0x1,-0x14(%rbp)
  jmp    L328
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <ISORegexp__white_space@plt>
  test   %eax,%eax
  je     L63
  movl   $0x1,-0x14(%rbp)
  jmp    L63
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  jne    L390
  movl   $0x1,-0x14(%rbp)
  jmp    L390
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <ISORegexp__white_space@plt>
  test   %eax,%eax
  jne    L272
  movl   $0x1,-0x14(%rbp)
  jmp    L272
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <ISORegexp__identifier_char@plt>
  test   %eax,%eax
  je     L374
  movl   $0x1,-0x14(%rbp)
  jmp    L374
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  je     L317
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x5f,%al
  je     L317
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x60,%al
  jle    L241
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x7a,%al
  jle    L317
L241:
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  jle    L355
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x39,%al
  jg     L355
L317:
  movl   $0x1,-0x14(%rbp)
  jmp    L355
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  je     L381
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x5f,%al
  je     L381
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  je     L381
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x60,%al
  jle    L24
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x7a,%al
  jle    L381
L24:
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  jle    L366
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x39,%al
  jg     L366
L381:
  movl   $0x1,-0x14(%rbp)
  jmp    L366
  mov    -0x30(%rbp),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L149
L179:
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,-0x8(%rbp)
  mov    -0x8(%rbp),%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x10(%rbp),%eax
  add    $0x1,%eax
  cmp    %eax,-0x34(%rbp)
  jle    L19
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L19
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x2(%rax),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,-0xc(%rbp)
  addl   $0x2,-0x10(%rbp)
L19:
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  cmp    -0x8(%rbp),%eax
  jl     L86
  mov    -0x4(%rbp),%eax
  cmp    -0xc(%rbp),%eax
  jg     L86
  movl   $0x1,-0x14(%rbp)
  nop
  jmp    L148
L86:
  addl   $0x1,-0x10(%rbp)
L149:
  mov    -0x10(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jle    L179
  jmp    L148
L172:
  nop
  jmp    L148
L328:
  nop
  jmp    L148
L63:
  nop
  jmp    L148
L390:
  nop
  jmp    L148
L272:
  nop
  jmp    L148
L374:
  nop
  jmp    L148
L355:
  nop
  jmp    L148
L366:
  nop
L148:
  cmpl   $0x0,-0x38(%rbp)
  je     L360
  cmpl   $0x0,-0x14(%rbp)
  sete   %al
  movzbl %al,%eax
  mov    %eax,-0x14(%rbp)
L360:
  mov    -0x14(%rbp),%eax
  leave
  ret
```

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;
}
```