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

```asm
<u8_escape_wchar>:
  endbr64
  push   %r13
  mov    %rdi,%r13
  xor    %edi,%edi
  cmp    $0x2,%rsi
  push   %r12
  seta   %dil
  mov    %edx,%r12d
  push   %rbp
  mov    %rsi,%rbp
  call   <assert@plt>
  lea    D116(%rip),%rsi
  cmp    $0xa,%r12d
  je     L150
  cmp    $0x1b,%r12d
  jg     L22
  cmp    $0x6,%r12d
  jle    L137
  lea    -0x7(%r12),%eax
  cmp    $0x14,%eax
  ja     L137
  lea    D45(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopl   (%rax)
L22:
  lea    D30(%rip),%rsi
  cmp    $0x5c,%r12d
  jne    L6
L150:
  pop    %rbp
  mov    %r13,%rdi
  pop    %r12
  pop    %r13
  jmp    1090 <buf_put2c@plt>
  nopw   0x0(%rax,%rax,1)
L6:
  cmp    $0x1f,%r12d
  jle    L137
  cmp    $0x7f,%r12d
  je     L137
  movzwl %r12w,%ecx
  lea    D58(%rip),%rdx
  cmp    $0xffff,%r12d
  jg     L37
  cmp    $0x7f,%r12d
  jg     L36
  mov    %r12b,0x0(%r13)
  pop    %rbp
  mov    $0x1,%eax
  movb   $0x0,0x1(%r13)
  pop    %r12
  pop    %r13
  ret
  nopw   0x0(%rax,%rax,1)
  lea    D64(%rip),%rsi
  jmp    L150
  nopl   0x0(%rax)
  lea    D52(%rip),%rsi
  jmp    L150
  nopl   0x0(%rax)
  lea    D11(%rip),%rsi
  jmp    L150
  nopl   0x0(%rax)
  lea    D41(%rip),%rsi
  jmp    L150
  nopl   0x0(%rax)
  lea    D12(%rip),%rsi
  jmp    L150
  nopl   0x0(%rax)
  lea    D8(%rip),%rsi
  jmp    L150
  nopl   0x0(%rax)
  lea    D79(%rip),%rsi
  jmp    L150
  nopl   0x0(%rax)
L137:
  movzbl %r12b,%ecx
  lea    D104(%rip),%rdx
L37:
  mov    %rbp,%rsi
  mov    %r13,%rdi
  pop    %rbp
  pop    %r12
  pop    %r13
  jmp    1070 <snprintf@plt>
  nopl   0x0(%rax,%rax,1)
L36:
  mov    %r12d,%ecx
  lea    D110(%rip),%rdx
  jmp    L37
```

tool_calls: name: parse_data
arguments: data_tag: D116
datatype: string
name: parse_data
arguments: data_tag: D30
datatype: string
name: parse_data
arguments: data_tag: D58
datatype: string
name: parse_data
arguments: data_tag: D64
datatype: string
name: parse_data
arguments: data_tag: D52
datatype: string
name: parse_data
arguments: data_tag: D11
datatype: string
name: parse_data
arguments: data_tag: D41
datatype: string
name: parse_data
arguments: data_tag: D12
datatype: string
name: parse_data
arguments: data_tag: D8
datatype: string
name: parse_data
arguments: data_tag: D79
datatype: string
name: parse_data
arguments: data_tag: D104
datatype: string
name: parse_data
arguments: data_tag: D110
datatype: string

tool: D116: \n

tool: D30: \\

tool: D58: \U%.8x

tool: D64: \a

tool: D52: \b

tool: D11: \t

tool: D41: \v

tool: D12: \f

tool: D8: \r

tool: D79: \e

tool: D104: \x%.2hhx

tool: D110: \u%.4hx

assistant: ```c
int u8_escape_wchar(char *buf, size_t sz, uint32_t ch) {
  assert(sz > 2);
  if (ch == L'\n')
    return buf_put2c(buf, "\\n");
  else if (ch == L'\t')
    return buf_put2c(buf, "\\t");
  else if (ch == L'\r')
    return buf_put2c(buf, "\\r");
  else if (ch == L'\x1B')
    return buf_put2c(buf, "\\e");
  else if (ch == L'\b')
    return buf_put2c(buf, "\\b");
  else if (ch == L'\f')
    return buf_put2c(buf, "\\f");
  else if (ch == L'\v')
    return buf_put2c(buf, "\\v");
  else if (ch == L'\a')
    return buf_put2c(buf, "\\a");
  else if (ch == L'\\')
    return buf_put2c(buf, "\\\\");
  else if (ch < 32 || ch == 0x7f)
    return snprintf(buf, sz, "\\x%.2hhx", (unsigned char)ch);
  else if (ch > 0xFFFF)
    return snprintf(buf, sz, "\\U%.8x", (uint32_t)ch);
  else if (ch >= 0x80)
    return snprintf(buf, sz, "\\u%.4hx", (unsigned short)ch);
  buf[0] = (char)ch;
  buf[1] = '\0';
  return 1;
}
```