user: 下面的汇编指令对应的C源代码是什么:

```asm
<nseel_simple_tokenizer>:
  endbr64
  push   %r15
  push   %r14
  mov    %rdx,%r14
  push   %r13
  mov    %rdi,%r13
  push   %r12
  mov    %rcx,%r12
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    (%rdi),%r15
  test   %rcx,%rcx
  je     L277
  mov    (%rcx),%ecx
  cmp    $0x1,%ecx
  je     L105
  cmp    $0x27,%ecx
  je     L143
  cmp    $0x22,%ecx
  je     L143
  cmp    %rsi,%r15
  jb     L30
  jmp    L285
  nopl   0x0(%rax)
L94:
  add    $0x1,%r15
  cmp    %r15,%rbp
  je     L285
L30:
  movsbl (%r15),%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L94
L175:
  cmp    %rbp,%r15
  jae    L285
  movsbl (%r15),%edi
  cmp    $0x24,%dil
  je     L260
  test   %r12,%r12
  setne  0xf(%rsp)
  cmp    $0x2f,%dil
  movzbl 0xf(%rsp),%esi
  sete   %al
  and    %sil,%al
  jne    L313
L49:
  call   <isalnum@plt>
  lea    0x1(%r15),%rbx
  movzbl (%r15),%ecx
  test   %rax,%rax
  jne    L406
  lea    -0x23(%rcx),%eax
  cmp    $0x1,%al
  jbe    L406
  cmp    $0x5f,%cl
  je     L406
  cmp    $0x27,%cl
  je     L270
  mov    $0x1,%edx
  cmp    $0x22,%cl
  jne    L498
L270:
  cmpb   $0x0,0xf(%rsp)
  je     L531
  movsbl %cl,%eax
  mov    %eax,(%r12)
  jmp    L531
L143:
  mov    %r15,%rbx
  nopl   0x0(%rax,%rax,1)
L531:
  cmp    %rbx,%rbp
  jbe    L63
L169:
  lea    0x1(%rbx),%rax
  movzbl (%rbx),%edx
  cmp    %rax,%rbp
  jbe    L98
  add    $0x2,%rbx
  cmp    $0x5c,%dl
  je     L531
L98:
  cmp    %cl,%dl
  je     L267
  mov    %rax,%rbx
  cmp    %rbx,%rbp
  ja     L169
  nopw   0x0(%rax,%rax,1)
L63:
  mov    %ebx,%edx
  sub    %r15d,%edx
L498:
  xor    %eax,%eax
  cmp    %r15,%rbx
  cmovbe %rax,%r15
L456:
  mov    %rbx,0x0(%r13)
  mov    %r15,%rax
  mov    %edx,(%r14)
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nop
L406:
  cmp    $0x24,%cl
  je     L115
L509:
  mov    %r15,%rbx
L23:
  add    $0x1,%rbx
  cmp    %rbx,%rbp
  jbe    L63
  nopl   (%rax)
L134:
  movsbl (%rbx),%edi
  call   <isalnum@plt>
  test   %rax,%rax
  jne    L64
  movzbl (%rbx),%eax
  cmp    $0x2e,%al
  je     L64
  cmp    $0x5f,%al
  jne    L63
L64:
  add    $0x1,%rbx
  cmp    %rbx,%rbp
  jne    L134
  jmp    L63
  nopl   0x0(%rax,%rax,1)
L285:
  mov    %rbp,%rbx
  xor    %edx,%edx
  xor    %r15d,%r15d
  jmp    L456
  nopw   0x0(%rax,%rax,1)
L313:
  lea    -0x1(%rbp),%rdx
  cmp    %rdx,%r15
  jae    L166
  movzbl 0x1(%r15),%edx
  cmp    $0x2f,%dl
  je     L137
  mov    %al,0xf(%rsp)
  cmp    $0x2a,%dl
  jne    L49
  cmp    $0x2f,%dl
  je     L137
  mov    %r15,%rax
  movl   $0x1,(%r12)
  add    $0x2,%r15
  jmp    L467
  nopw   0x0(%rax,%rax,1)
L277:
  mov    %r15,%rdi
  call   <nseel_skip_space_and_comments@plt>
  mov    %rax,%r15
  jmp    L175
  nopl   0x0(%rax,%rax,1)
L105:
  mov    %r15,%rax
L467:
  cmp    %r15,%rbp
  jbe    L528
  nopl   0x0(%rax,%rax,1)
L148:
  mov    %r15,%rbx
  add    $0x1,%r15
  cmpb   $0x2a,-0x1(%r15)
  jne    L261
  cmp    %r15,%rbp
  jbe    L261
  cmpb   $0x2f,(%r15)
  jne    L148
  add    $0x2,%rbx
  movl   $0x0,(%r12)
  mov    %rax,%r15
  mov    %ebx,%edx
  sub    %eax,%edx
  jmp    L498
  nopl   0x0(%rax)
L261:
  cmp    %r15,%rbp
  jne    L148
L528:
  mov    %r15d,%edx
  mov    %r15,%rbx
  mov    %rax,%r15
  sub    %eax,%edx
  jmp    L498
  nopl   (%rax)
L260:
  lea    0x3(%r15),%rax
  cmp    %rax,%rbp
  jbe    L39
  cmpb   $0x27,0x1(%r15)
  je     L19
L39:
  test   %r12,%r12
  setne  0xf(%rsp)
  jmp    L49
  nopl   (%rax)
L115:
  lea    -0x1(%rbp),%rax
  cmp    %rax,%r15
  jae    L509
  cmpb   $0x7e,0x1(%r15)
  cmovne %r15,%rbx
  jmp    L23
  nopl   0x0(%rax,%rax,1)
L267:
  mov    %eax,%edx
  mov    %rax,%rbx
  sub    %r15d,%edx
  test   %r12,%r12
  je     L498
  movl   $0x0,(%r12)
  jmp    L498
  xchg   %ax,%ax
L166:
  mov    %al,0xf(%rsp)
  jmp    L49
L19:
  cmpb   $0x27,0x3(%r15)
  lea    0x4(%r15),%rbx
  mov    $0x4,%edx
  jne    L39
  jmp    L498
L137:
  mov    %r15,%rbx
  jmp    L321
  nopl   0x0(%rax,%rax,1)
L301:
  cmp    $0xa,%al
  je     L63
L321:
  add    $0x1,%rbx
  cmp    %rbx,%rbp
  je     L63
  movzbl (%rbx),%eax
  cmp    $0xd,%al
  jne    L301
  jmp    L63
```

assistant: ```c
const char *nseel_simple_tokenizer(const char **ptr, const char *endptr, int32_t *lenOut, int32_t *state) {
  const char *p = *ptr;
  const char *rv = p;
  char delim;
  if (state) {
    if (*state == 1)
      goto in_comment;
    if (*state == '\'' || *state == '\"') {
      delim = (char)*state;
      goto in_string;
    }
    while (p < endptr && isspace(p[0]))
      p++;
  } else {
    p = nseel_skip_space_and_comments(p, endptr);
  }
  if (p >= endptr) {
    *ptr = endptr;
    *lenOut = 0;
    return NULL;
  }
  rv = p;
  if (*p == '$' && p + 3 < endptr && p[1] == '\'' && p[3] == '\'') {
    p += 4;
  } else if (state && *p == '/' && p < endptr - 1 && (p[1] == '/' || p[1] == '*')) {
    if (p[1] == '/') {
      while (p < endptr && *p != '\r' && *p != '\n')
        p++;
    } else {
      if (state)
        *state = 1;
      p += 2;
    in_comment:
      while (p < endptr) {
        const char c = *p++;
        if (c == '*' && p < endptr && *p == '/') {
          p++;
          if (state)
            *state = 0;
          break;
        }
      }
    }
  } else if (isalnum(*p) || *p == '_' || *p == '#' || *p == '$') {
    if (*p == '$' && p < endptr - 1 && p[1] == '~')
      p++;
    p++;
    while (p < endptr && (isalnum(*p) || *p == '_' || *p == '.'))
      p++;
  } else if (*p == '\'' || *p == '\"') {
    delim = *p++;
    if (state)
      *state = delim;
  in_string:
    while (p < endptr) {
      const char c = *p++;
      if (p < endptr && c == '\\')
        p++;
      else if (c == delim) {
        if (state)
          *state = 0;
        break;
      }
    }
  } else {
    p++;
  }
  *ptr = p;
  *lenOut = (int32_t)(p - rv);
  return p > rv ? rv : NULL;
}
```