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

```asm
<wcstoimax>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %edx,-0x34(%rbp)
  jmp    L119
L61:
  addq   $0x1,-0x28(%rbp)
L119:
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L61
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L209
  movl   $0x1,-0x1c(%rbp)
  addq   $0x1,-0x28(%rbp)
  jmp    L33
L209:
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2b,%al
  jne    L155
  movl   $0x0,-0x1c(%rbp)
  addq   $0x1,-0x28(%rbp)
  jmp    L33
L155:
  movl   $0x0,-0x1c(%rbp)
L33:
  cmpl   $0x0,-0x34(%rbp)
  jne    L200
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x30,%al
  jne    L157
  addq   $0x1,-0x28(%rbp)
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x58,%al
  je     L228
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x78,%al
  jne    L139
L228:
  movl   $0x10,-0x34(%rbp)
  addq   $0x1,-0x28(%rbp)
  jmp    L91
L139:
  movl   $0x8,-0x34(%rbp)
  jmp    L91
L157:
  movl   $0xa,-0x34(%rbp)
  jmp    L91
L200:
  cmpl   $0x10,-0x34(%rbp)
  jne    L91
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x30,%al
  jne    L91
  mov    -0x28(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0x58,%al
  je     L85
  mov    -0x28(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0x78,%al
  jne    L91
L85:
  addq   $0x2,-0x28(%rbp)
L91:
  movl   $0x0,-0x18(%rbp)
  mov    -0x34(%rbp),%eax
  mov    %eax,-0x10(%rbp)
  mov    D10(%rip),%rax
  mov    (%rax),%eax
  cltd
  idivl  -0x10(%rbp)
  mov    %eax,-0xc(%rbp)
  mov    D10(%rip),%rax
  mov    (%rax),%eax
  cltd
  idivl  -0x10(%rbp)
  mov    %edx,-0x8(%rbp)
  movl   $0x0,-0x14(%rbp)
  jmp    L22
L250:
  mov    -0x18(%rbp),%eax
  cmp    -0xc(%rbp),%eax
  jg     L218
  mov    -0x18(%rbp),%eax
  cmp    -0xc(%rbp),%eax
  jne    L256
  mov    -0x4(%rbp),%eax
  cmp    -0x8(%rbp),%eax
  jle    L256
L218:
  movl   $0x1,-0x14(%rbp)
L256:
  mov    -0x18(%rbp),%eax
  imul   -0x10(%rbp),%eax
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x18(%rbp)
  addq   $0x1,-0x28(%rbp)
L22:
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <CharToInt@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jl     L250
  cmpq   $0x0,-0x30(%rbp)
  je     L39
  mov    -0x30(%rbp),%rax
  mov    -0x28(%rbp),%rdx
  mov    %rdx,(%rax)
L39:
  cmpl   $0x0,-0x14(%rbp)
  je     L1
  mov    D31(%rip),%rax
  mov    (%rax),%edx
  mov    D54(%rip),%rax
  mov    %edx,(%rax)
  cmpl   $0x0,-0x1c(%rbp)
  je     L152
  mov    D30(%rip),%rax
  mov    (%rax),%eax
  jmp    L234
L152:
  mov    D10(%rip),%rax
  mov    (%rax),%eax
  jmp    L234
L1:
  cmpl   $0x0,-0x1c(%rbp)
  je     L203
  mov    -0x18(%rbp),%eax
  neg    %eax
  jmp    L234
L203:
  mov    -0x18(%rbp),%eax
L234:
  leave
  ret
```

assistant: ```c
intmax_t wcstoimax(wchar_t const *restrict nptr, wchar_t **restrict endptr, int base) {
  while (isspace(*nptr))
    ++nptr;
  bool sign;
  if (*nptr == '-')
    sign = true, ++nptr;
  else if (*nptr == '+')
    sign = false, ++nptr;
  else
    sign = false;
  if (!base) {
    if (*nptr == '0') {
      if (*++nptr == 'X' || *nptr == 'x')
        base = 16, ++nptr;
      else
        base = 8;
    } else
      base = 10;
  } else if (base == 16) {
    if (nptr[0] == '0' && (nptr[1] == 'X' || nptr[1] == 'x'))
      nptr += 2;
  };
  intmax_t val = 0, mul = base, max = INTMAX_MAX / mul;
  int gap = INTMAX_MAX % mul;
  bool ovr = 0;
  for (int dig; (dig = CharToInt(*nptr)) < base; ++nptr) {
    if (val > max || (val == max && dig > gap))
      ovr = 1;
    val = val * mul + dig;
  };
  if (endptr)
    *endptr = (wchar_t *)nptr;
  if (ovr) {
    errno = ERANGE;
    return sign ? INTMAX_MIN : INTMAX_MAX;
  }
  return sign ? -val : val;
  ;
}
```