user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<emit_literal>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %r8,(%rsp)
  mov    %r9,0x8(%rsp)
  cmp    %rdx,%rsi
  je     L43
  mov    %rdi,%rbp
  mov    %rsi,%r14
  mov    %rdx,%rbx
  mov    %rcx,%r13
  lea    D26(%rip),%r12
L94:
  mov    0x8(%rsp),%rdi
  call   <emit_indent@plt>
  mov    (%rsp),%rsi
  xor    %eax,%eax
  mov    %r13,%rdx
  lea    D56(%rip),%rdi
  call   <printf@plt>
  cmp    %r14,%rbx
  ja     L111
  jmp    L122
  nopl   (%rax)
L159:
  cmp    $0x27,%r15b
  je     L5
  movzbl %r15b,%edi
  call   <putchar@plt>
L76:
  add    $0x1,%r14
  cmp    %r14,%rbx
  je     L122
L111:
  movzbl 0x0(%rbp,%r14,1),%r15d
  cmp    $0x5c,%r15b
  je     L98
  cmp    $0x22,%r15b
  je     L98
  cmp    $0x1f,%r15b
  ja     L159
L5:
  lea    -0x8(%r15),%eax
  cmp    $0x5,%al
  ja     L92
  movzbl %al,%eax
  movslq (%r12,%rax,4),%rax
  add    %r12,%rax
  notrack jmp *%rax
  nopl   0x0(%rax)
  lea    D16(%rip),%rdi
  xor    %eax,%eax
  add    $0x1,%r14
  call   <printf@plt>
  cmp    %r14,%rbx
  jne    L111
L122:
  add    $0x18,%rsp
  lea    D62(%rip),%rdi
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1090 <puts@plt>
  nopl   0x0(%rax)
  lea    D39(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L76
  nopl   0x0(%rax,%rax,1)
  lea    D2(%rip),%rdi
  add    $0x1,%r14
  call   <puts@plt>
  cmp    $0x1,%r13
  sbb    $0xffffffffffffffff,%r13
  cmp    %r14,%rbx
  jne    L94
L43:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D15(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L76
  nopl   0x0(%rax,%rax,1)
  lea    D58(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L76
  nopl   0x0(%rax,%rax,1)
  lea    D65(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L76
  nopl   0x0(%rax,%rax,1)
L98:
  mov    $0x5c,%edi
  call   <putchar@plt>
  movzbl %r15b,%edi
  call   <putchar@plt>
  jmp    L76
L92:
  mov    $0x5c,%edi
  call   <putchar@plt>
  mov    $0x30,%edi
  call   <putchar@plt>
  mov    %r15d,%edi
  shr    $0x3,%dil
  add    $0x30,%edi
  movzbl %dil,%edi
  call   <putchar@plt>
  mov    %r15d,%edx
  and    $0x7,%edx
  lea    0x30(%rdx),%edi
  call   <putchar@plt>
  jmp    L76
```

tool_calls: name: parse_data
arguments: tag: D56
type_guessed: string
name: parse_data
arguments: tag: D16
type_guessed: string
name: parse_data
arguments: tag: D62
type_guessed: string
name: parse_data
arguments: tag: D39
type_guessed: string
name: parse_data
arguments: tag: D2
type_guessed: string
name: parse_data
arguments: tag: D15
type_guessed: string
name: parse_data
arguments: tag: D58
type_guessed: string
name: parse_data
arguments: tag: D65
type_guessed: string

tool: D56: TEXT_addstring (%s, %lu, "

tool: D16: \f

tool: D62: ");

tool: D39: \v

tool: D2: \n");

tool: D15: \t

tool: D58: \b

tool: D65: \r

assistant: ```c
void emit_literal(unsigned char *line, unsigned long startindex, unsigned long endindex, unsigned long lineno, const char *textvar, unsigned long indent) {
  unsigned long i;
restart:
  if (startindex == endindex)
    return;
  emit_indent(indent);
  printf("TEXT_addstring (%s, %lu, \"", textvar, lineno);
  for (i = startindex; i < endindex; i++) {
    unsigned char ch = line[i];
    if (ch == '\\' || ch == '"') {
      putchar('\\');
      putchar(ch);
    } else if (ch >= ' ' && ch != '\'') {
      putchar(ch);
    } else if (ch == '\n') {
      printf("\\n\");\n");
      startindex = i + 1;
      if (lineno > 0)
        lineno++;
      goto restart;
    } else if (ch == '\t') {
      printf("\\t");
    } else if (ch == '\b') {
      printf("\\b");
    } else if (ch == '\r') {
      printf("\\r");
    } else if (ch == '\f') {
      printf("\\f");
    } else if (ch == '\v') {
      printf("\\v");
    } else {
      putchar('\\');
      putchar('0' + ((ch / 64) % 8));
      putchar('0' + ((ch / 8) % 8));
      putchar('0' + (ch % 8));
    }
  }
  printf("\");\n");
}
```