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

```asm
<BASM_XCallSplitSigW64>:
  endbr64
  push   %r14
  mov    %rsi,%r11
  mov    %rdx,%r10
  mov    %rcx,%r9
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  movzbl (%rdi),%eax
  cmp    $0x28,%al
  jne    L69
  movzbl 0x1(%rdi),%eax
  add    $0x1,%rdi
L69:
  xor    %r8d,%r8d
  xor    %ecx,%ecx
  xor    %r12d,%r12d
  test   %al,%al
  je     L104
  cmp    $0x29,%al
  je     L104
  lea    D16(%rip),%rsi
  lea    D20(%rip),%rbp
  lea    D10(%rip),%rbx
  nopl   0x0(%rax)
L23:
  sub    $0x43,%eax
  lea    0x1(%rdi),%rdx
  cmp    $0x36,%al
  ja     L13
  movzbl %al,%eax
  movslq (%rsi,%rax,4),%rax
  add    %rsi,%rax
  notrack jmp *%rax
  nopl   0x0(%rax,%rax,1)
  cmp    $0x3,%ecx
  jle    L16
  add    $0x1,%r8d
L13:
  movzbl 0x1(%rdi),%eax
  mov    %rdx,%rdi
  test   %al,%al
  setne  %r13b
L184:
  cmp    $0x29,%al
  je     L104
  test   %r13b,%r13b
  jne    L23
L104:
  cmp    $0x29,%al
  sete   %al
  movzbl %al,%eax
  add    %rax,%rdi
  test   %r11,%r11
  je     L76
  mov    %rdi,(%r11)
L76:
  test   %r10,%r10
  je     L190
  mov    %ecx,(%r10)
L190:
  test   %r9,%r9
  je     L243
  mov    %r8d,(%r9)
L243:
  pop    %rbx
  mov    %r12d,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nopw   0x0(%rax,%rax,1)
  cmp    $0x3,%ecx
  jle    L16
  mov    %r8d,%eax
  and    $0x1,%eax
  lea    0x2(%r8,%rax,1),%r8d
  movzbl 0x1(%rdi),%eax
  mov    %rdx,%rdi
  test   %al,%al
  setne  %r13b
  jmp    L184
  nopl   0x0(%rax,%rax,1)
  cmp    $0x3,%ecx
  jle    L4
  add    $0x1,%r8d
L126:
  movzbl 0x1(%rdi),%eax
  cmp    $0x50,%al
  jne    L96
  nopl   (%rax)
L47:
  movzbl 0x1(%rdx),%eax
  add    $0x1,%rdx
  cmp    $0x50,%al
  je     L47
L96:
  lea    -0x61(%rax),%edi
  cmp    $0x19,%dil
  ja     L43
  movzbl 0x1(%rdx),%eax
  lea    0x1(%rdx),%rdi
  test   %al,%al
  setne  %r13b
  jmp    L184
  nopl   0x0(%rax)
  movzbl 0x2(%rdi),%eax
  movzbl 0x1(%rdi),%edx
  lea    0x2(%rdi),%r14
  test   %al,%al
  setne  %r13b
  sub    $0x64,%edx
  cmp    $0x7,%dl
  ja     L204
  movzbl %dl,%edx
  movslq 0x0(%rbp,%rdx,4),%rdx
  add    %rbp,%rdx
  notrack jmp *%rdx
  movzbl 0x2(%rdi),%eax
  movzbl 0x1(%rdi),%edx
  lea    0x2(%rdi),%r14
  test   %al,%al
  setne  %r13b
  sub    $0x64,%edx
  cmp    $0x7,%dl
  ja     L204
  movzbl %dl,%edx
  movslq (%rbx,%rdx,4),%rdx
  add    %rbx,%rdx
  notrack jmp *%rdx
  nopw   0x0(%rax,%rax,1)
L16:
  movzbl 0x1(%rdi),%eax
  add    $0x1,%ecx
  mov    %rdx,%rdi
  test   %al,%al
  setne  %r13b
  jmp    L184
  nopl   (%rax)
L4:
  add    $0x1,%ecx
  jmp    L126
  add    $0x4,%r12d
  mov    %r14,%rdi
  jmp    L184
  nopl   0x0(%rax)
  add    $0x20,%r12d
  mov    %r14,%rdi
  jmp    L184
  nopl   0x0(%rax)
L204:
  mov    %r14,%rdi
  jmp    L184
  nopl   0x0(%rax,%rax,1)
  add    $0x10,%r12d
  mov    %r14,%rdi
  jmp    L184
  nopl   0x0(%rax)
  add    $0x8,%r12d
  mov    %r14,%rdi
  jmp    L184
  nopl   0x0(%rax)
L43:
  test   %al,%al
  mov    %rdx,%rdi
  setne  %r13b
  cmp    $0x58,%al
  jne    L184
  jmp    L222
  nopl   0x0(%rax,%rax,1)
L219:
  test   %r13b,%r13b
  je     L300
L222:
  mov    %rdx,%r14
  movzbl 0x1(%rdx),%eax
  add    $0x1,%rdx
  test   %al,%al
  setne  %r13b
  cmp    $0x3b,%al
  jne    L219
L300:
  mov    %rdx,%rdi
  cmp    $0x3b,%al
  jne    L184
  movzbl 0x1(%rdx),%eax
  lea    0x2(%r14),%rdi
  test   %al,%al
  setne  %r13b
  jmp    L184
  add    $0xc,%r12d
  mov    %r14,%rdi
  jmp    L184
```

assistant: ```c
int BASM_XCallSplitSigW64(char *sig, char **esig, int *rni, int *rns) {
  char *s;
  int i, j, ni, ns;
  s = sig;
  i = 0;
  ni = 0;
  ns = 0;
  if (*s == '(')
    s++;
  while (*s && (*s != ')')) {
    switch (*s++) {
    case 'a':
    case 'b':
    case 'c':
    case 'h':
    case 's':
    case 't':
    case 'w':
    case 'i':
    case 'j':
      if (ni < 4) {
        ni++;
        break;
      }
      ns++;
      break;
    case 'l':
    case 'm':
    case 'x':
    case 'y':
      if (ni < 4) {
        ni++;
        break;
      }
      ns++;
      break;
    case 'r':
      if (ni < 4) {
        ni++;
        break;
      }
      ns++;
      break;
    case 'P':
      if (ni < 4)
        ni++;
      else
        ns++;
      while (*s == 'P')
        s++;
      if ((*s >= 'a') && (*s <= 'z')) {
        s++;
        break;
      }
      if (*s == 'X') {
        while (*s && *s != ';')
          s++;
        if (*s == ';')
          s++;
      }
      break;
    case 'd':
      if (ni < 4) {
        ni++;
        break;
      }
      ns++;
      break;
    case 'e':
      if (ni < 4) {
        ni++;
        break;
      }
      if (ns & 1)
        ns++;
      ns += 2;
      break;
    case 'f':
    case 'k':
      if (ni < 4) {
        ni++;
        break;
      }
      ns++;
      break;
    case 'g':
    case 'n':
    case 'o':
      if (ni < 4) {
        ni++;
        break;
      }
      if (ns & 1)
        ns++;
      ns += 2;
      break;
    case 'C':
      switch (*s++) {
      case 'f':
        i += 8;
        break;
      case 'd':
        i += 16;
        break;
      case 'e':
        i += 32;
        break;
      case 'g':
        i += 32;
        break;
      case 'k':
        i += 4;
        break;
      }
      break;
    case 'G':
      switch (*s++) {
      case 'f':
        i += 4;
        break;
      case 'd':
        i += 8;
        break;
      case 'e':
        i += 12;
        break;
      case 'g':
        i += 16;
        break;
      case 'k':
        i += 4;
        break;
      }
      break;
    default:
      break;
    }
  }
  if (*s && *s == ')')
    s++;
  if (esig)
    *esig = s;
  if (rni)
    *rni = ni;
  if (rns)
    *rns = ns;
  return (i);
}
```