user: What would the C source look like for the assembly code provided here?

```asm
<escape>:
  endbr64
  mov    %rdi,%r8
  mov    %rsi,%rdi
  movzbl (%r8),%ecx
  test   %cl,%cl
  je     L15
  mov    $0x0,%eax
  mov    $0x0,%esi
  lea    D0(%rip),%r9
  jmp    L21
  lea    0x1(%rax),%edx
  movslq %eax,%rcx
  movb   $0x5c,(%rdi,%rcx,1)
  add    $0x2,%eax
  movslq %edx,%rdx
  movb   $0x61,(%rdi,%rdx,1)
  add    $0x1,%esi
L16:
  movslq %esi,%rdx
  movzbl (%r8,%rdx,1),%ecx
  test   %cl,%cl
  je     L54
L21:
  lea    -0x7(%rcx),%edx
  cmp    $0x55,%dl
  ja     L84
  movzbl %dl,%edx
  movslq (%r9,%rdx,4),%rdx
  add    %r9,%rdx
  notrack jmp *%rdx
  lea    0x1(%rax),%edx
  movslq %eax,%rcx
  movb   $0x5c,(%rdi,%rcx,1)
  add    $0x2,%eax
  movslq %edx,%rdx
  movb   $0x62,(%rdi,%rdx,1)
  add    $0x1,%esi
  jmp    L16
  lea    0x1(%rax),%edx
  movslq %eax,%rcx
  movb   $0x5c,(%rdi,%rcx,1)
  add    $0x2,%eax
  movslq %edx,%rdx
  movb   $0x66,(%rdi,%rdx,1)
  add    $0x1,%esi
  jmp    L16
  lea    0x1(%rax),%edx
  movslq %eax,%rcx
  movb   $0x5c,(%rdi,%rcx,1)
  add    $0x2,%eax
  movslq %edx,%rdx
  movb   $0x6e,(%rdi,%rdx,1)
  add    $0x1,%esi
  jmp    L16
  lea    0x1(%rax),%edx
  movslq %eax,%rcx
  movb   $0x5c,(%rdi,%rcx,1)
  add    $0x2,%eax
  movslq %edx,%rdx
  movb   $0x72,(%rdi,%rdx,1)
  add    $0x1,%esi
  jmp    L16
  lea    0x1(%rax),%edx
  movslq %eax,%rcx
  movb   $0x5c,(%rdi,%rcx,1)
  add    $0x2,%eax
  movslq %edx,%rdx
  movb   $0x74,(%rdi,%rdx,1)
  add    $0x1,%esi
  jmp    L16
  lea    0x1(%rax),%edx
  movslq %eax,%rcx
  movb   $0x5c,(%rdi,%rcx,1)
  add    $0x2,%eax
  movslq %edx,%rdx
  movb   $0x76,(%rdi,%rdx,1)
  add    $0x1,%esi
  jmp    L16
  lea    0x1(%rax),%edx
  movslq %eax,%rcx
  movb   $0x5c,(%rdi,%rcx,1)
  add    $0x2,%eax
  movslq %edx,%rdx
  movb   $0x5c,(%rdi,%rdx,1)
  add    $0x1,%esi
  jmp    L16
  lea    0x1(%rax),%edx
  movslq %eax,%rcx
  movb   $0x5c,(%rdi,%rcx,1)
  add    $0x2,%eax
  movslq %edx,%rdx
  movb   $0x3f,(%rdi,%rdx,1)
  add    $0x1,%esi
  jmp    L16
  lea    0x1(%rax),%edx
  movslq %eax,%rcx
  movb   $0x5c,(%rdi,%rcx,1)
  add    $0x2,%eax
  movslq %edx,%rdx
  movb   $0x27,(%rdi,%rdx,1)
  add    $0x1,%esi
  jmp    L16
  lea    0x1(%rax),%edx
  movslq %eax,%rcx
  movb   $0x5c,(%rdi,%rcx,1)
  add    $0x2,%eax
  movslq %edx,%rdx
  movb   $0x22,(%rdi,%rdx,1)
  add    $0x1,%esi
  jmp    L16
L84:
  add    $0x1,%esi
  movslq %eax,%rdx
  mov    %cl,(%rdi,%rdx,1)
  lea    0x1(%rax),%eax
  jmp    L16
L15:
  mov    $0x0,%eax
L54:
  cltq
  movb   $0x0,(%rdi,%rax,1)
  ret
```

assistant: ```c
void escape(char s[], char t[]) {
  int i = 0;
  int j = 0;
  while (s[i] != '\0') {
    switch (s[i]) {
    case '\a':
      t[j++] = '\\';
      t[j++] = 'a';
      i++;
      break;
    case '\b':
      t[j++] = '\\';
      t[j++] = 'b';
      i++;
      break;
    case '\f':
      t[j++] = '\\';
      t[j++] = 'f';
      i++;
      break;
    case '\n':
      t[j++] = '\\';
      t[j++] = 'n';
      i++;
      break;
    case '\r':
      t[j++] = '\\';
      t[j++] = 'r';
      i++;
      break;
    case '\t':
      t[j++] = '\\';
      t[j++] = 't';
      i++;
      break;
    case '\v':
      t[j++] = '\\';
      t[j++] = 'v';
      i++;
      break;
    case '\\':
      t[j++] = '\\';
      t[j++] = '\\';
      i++;
      break;
    case '\?':
      t[j++] = '\\';
      t[j++] = '?';
      i++;
      break;
    case '\'':
      t[j++] = '\\';
      t[j++] = '\'';
      i++;
      break;
    case '\"':
      t[j++] = '\\';
      t[j++] = '\"';
      i++;
      break;
    default:
      t[j++] = s[i++];
      break;
    }
  }
  t[j] = '\0';
}
```