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

```asm
<xmlEncodeString>:
  endbr64
  mov    %rdi,%r10
  mov    %esi,%r11d
  lea    -0x1(%rcx),%edi
  xor    %r8d,%r8d
  test   %ecx,%ecx
  je     L462
  lea    D1(%rip),%r9
  nopl   0x0(%rax,%rax,1)
L285:
  movzbl (%rdx),%eax
  cmp    $0x3e,%al
  ja     L122
  movzbl %al,%esi
  movslq (%r9,%rsi,4),%rsi
  add    %r9,%rsi
  notrack jmp *%rsi
  nopl   0x0(%rax)
L122:
  cmp    $0x7f,%al
  jne    L519
L364:
  mov    $0xffffffff,%r8d
L462:
  mov    %r8d,%eax
  ret
  cs nopw 0x0(%rax,%rax,1)
L519:
  test   %al,%al
  js     L76
  add    $0x1,%rdx
  test   %r11d,%r11d
  je     L507
  mov    %al,(%r10)
  sub    $0x1,%r11d
  add    $0x1,%r10
L507:
  add    $0x1,%r8d
  mov    %edi,%ecx
  jmp    L189
  nopl   0x0(%rax)
  cmp    $0x3,%r11d
  ja     L252
L30:
  add    $0x1,%rdx
  add    $0x4,%r8d
  mov    %edi,%ecx
L189:
  lea    -0x1(%rcx),%edi
  test   %ecx,%ecx
  jne    L285
  jmp    L462
  nopl   (%rax)
  cmp    $0x3,%r11d
  jbe    L30
  movl   $0x3b746c26,(%r10)
  sub    $0x4,%r11d
  add    $0x4,%r10
  jmp    L30
  nop
  cmp    $0x5,%r11d
  jbe    L283
  mov    $0x3b73,%ecx
  movl   $0x6f706126,(%r10)
  sub    $0x6,%r11d
  add    $0x6,%r10
  mov    %cx,-0x2(%r10)
L283:
  add    $0x1,%rdx
  add    $0x6,%r8d
  mov    %edi,%ecx
  jmp    L189
  nopl   0x0(%rax,%rax,1)
  cmp    $0x4,%r11d
  jbe    L398
  movl   $0x706d6126,(%r10)
  sub    $0x5,%r11d
  add    $0x5,%r10
  movb   $0x3b,-0x1(%r10)
L398:
  add    $0x1,%rdx
  add    $0x5,%r8d
  mov    %edi,%ecx
  jmp    L189
  cs nopw 0x0(%rax,%rax,1)
  cmp    $0x5,%r11d
  jbe    L283
  mov    $0x3b74,%eax
  sub    $0x6,%r11d
  add    $0x6,%r10
  mov    %edi,%ecx
  movl   $0x6f757126,-0x6(%r10)
  add    $0x1,%rdx
  add    $0x6,%r8d
  mov    %ax,-0x2(%r10)
  jmp    L189
  nop
L252:
  movl   $0x3b746726,(%r10)
  sub    $0x4,%r11d
  add    $0x4,%r10
  jmp    L30
  nopl   0x0(%rax)
L76:
  test   %edi,%edi
  je     L364
  mov    %eax,%esi
  and    $0xffffffe0,%esi
  cmp    $0xc0,%sil
  je     L153
  cmp    $0x1,%edi
  je     L364
  mov    %eax,%esi
  and    $0xfffffff0,%esi
  cmp    $0xe0,%sil
  je     L265
  cmp    $0x2,%edi
  jbe    L318
  mov    %eax,%esi
  and    $0xfffffff8,%esi
  cmp    $0xf0,%sil
  jne    L318
  movzbl 0x1(%rdx),%esi
  and    $0xffffffc0,%esi
  cmp    $0x80,%sil
  jne    L364
  movzbl 0x2(%rdx),%esi
  and    $0xffffffc0,%esi
  cmp    $0x80,%sil
  jne    L364
  movzbl 0x3(%rdx),%esi
  and    $0xffffffc0,%esi
  cmp    $0x80,%sil
  jne    L364
  cmp    $0x3,%r11d
  jbe    L256
  mov    %al,(%r10)
  movzbl 0x1(%rdx),%eax
  sub    $0x4,%r11d
  add    $0x4,%rdx
  add    $0x4,%r10
  mov    %al,-0x3(%r10)
  movzbl -0x2(%rdx),%eax
  mov    %al,-0x2(%r10)
  movzbl -0x1(%rdx),%eax
  mov    %al,-0x1(%r10)
L13:
  add    $0x4,%r8d
  sub    $0x4,%ecx
  jmp    L189
  nop
L153:
  movzbl 0x1(%rdx),%esi
  and    $0xffffffc0,%esi
  cmp    $0x80,%sil
  je     L498
  nopl   0x0(%rax)
L318:
  cmp    $0x3,%edi
  jbe    L559
  mov    %eax,%esi
  and    $0xfffffffc,%esi
  cmp    $0xf8,%sil
  jne    L559
  movzbl 0x1(%rdx),%esi
  and    $0xffffffc0,%esi
  cmp    $0x80,%sil
  jne    L364
  movzbl 0x2(%rdx),%esi
  and    $0xffffffc0,%esi
  cmp    $0x80,%sil
  jne    L364
  movzbl 0x3(%rdx),%esi
  and    $0xffffffc0,%esi
  cmp    $0x80,%sil
  jne    L364
  movzbl 0x4(%rdx),%esi
  and    $0xffffffc0,%esi
  cmp    $0x80,%sil
  jne    L364
  cmp    $0x4,%r11d
  jbe    L292
  mov    %al,(%r10)
  movzbl 0x1(%rdx),%eax
  sub    $0x5,%r11d
  add    $0x5,%rdx
  add    $0x5,%r10
  mov    %al,-0x4(%r10)
  movzbl -0x3(%rdx),%eax
  mov    %al,-0x3(%r10)
  movzbl -0x2(%rdx),%eax
  mov    %al,-0x2(%r10)
  movzbl -0x1(%rdx),%eax
  mov    %al,-0x1(%r10)
L305:
  add    $0x5,%r8d
  sub    $0x5,%ecx
  jmp    L189
  nopl   0x0(%rax)
L265:
  movzbl 0x1(%rdx),%esi
  and    $0xffffffc0,%esi
  cmp    $0x80,%sil
  je     L430
L559:
  cmp    $0x4,%edi
  jbe    L364
  mov    %eax,%esi
  and    $0xfffffffe,%esi
  cmp    $0xfc,%sil
  jne    L364
  movzbl 0x1(%rdx),%esi
  and    $0xffffffc0,%esi
  cmp    $0x80,%sil
  jne    L364
  movzbl 0x2(%rdx),%esi
  and    $0xffffffc0,%esi
  cmp    $0x80,%sil
  jne    L364
  movzbl 0x3(%rdx),%esi
  and    $0xffffffc0,%esi
  cmp    $0x80,%sil
  jne    L364
  movzbl 0x4(%rdx),%esi
  and    $0xffffffc0,%esi
  cmp    $0x80,%sil
  jne    L364
  movzbl 0x5(%rdx),%esi
  and    $0xffffffc0,%esi
  cmp    $0x80,%sil
  jne    L364
  cmp    $0x5,%r11d
  jbe    L535
  mov    %al,(%r10)
  movzbl 0x1(%rdx),%eax
  sub    $0x6,%r11d
  add    $0x6,%rdx
  add    $0x6,%r10
  mov    %al,-0x5(%r10)
  movzbl -0x4(%rdx),%eax
  mov    %al,-0x4(%r10)
  movzbl -0x3(%rdx),%eax
  mov    %al,-0x3(%r10)
  movzbl -0x2(%rdx),%eax
  mov    %al,-0x2(%r10)
  movzbl -0x1(%rdx),%eax
  mov    %al,-0x1(%r10)
L314:
  add    $0x6,%r8d
  sub    $0x6,%ecx
  jmp    L189
  nopw   0x0(%rax,%rax,1)
L535:
  add    $0x6,%rdx
  jmp    L314
L430:
  movzbl 0x2(%rdx),%esi
  and    $0xffffffc0,%esi
  cmp    $0x80,%sil
  jne    L559
  cmp    $0x2,%r11d
  jbe    L110
  mov    %al,(%r10)
  movzbl 0x1(%rdx),%eax
  sub    $0x3,%r11d
  add    $0x3,%rdx
  add    $0x3,%r10
  mov    %al,-0x2(%r10)
  movzbl -0x1(%rdx),%eax
  mov    %al,-0x1(%r10)
L330:
  add    $0x3,%r8d
  sub    $0x3,%ecx
  jmp    L189
L498:
  cmp    $0x1,%r11d
  jbe    L235
  mov    %al,(%r10)
  movzbl 0x1(%rdx),%eax
  sub    $0x2,%r11d
  add    $0x2,%rdx
  add    $0x2,%r10
  mov    %al,-0x1(%r10)
L88:
  add    $0x2,%r8d
  sub    $0x2,%ecx
  jmp    L189
L235:
  add    $0x2,%rdx
  jmp    L88
L110:
  add    $0x3,%rdx
  jmp    L330
L256:
  add    $0x4,%rdx
  jmp    L13
L292:
  add    $0x5,%rdx
  jmp    L305
```

assistant: ```c
int xmlEncodeString(unsigned char *out, unsigned int olen, const unsigned char *in, unsigned int ilen) {
  int len;
  len = 0;
  for (; ilen--;)
    switch (*in) {
    case 0x00:
    case 0x01:
    case 0x02:
    case 0x03:
    case 0x04:
    case 0x05:
    case 0x06:
    case 0x07:
    case 0x08:
    case 0x0b:
    case 0x0c:
    case 0x0e:
    case 0x0f:
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
    case 0x1a:
    case 0x1b:
    case 0x1c:
    case 0x1d:
    case 0x1e:
    case 0x1f:
    case 0x7f:
      return (-1);
      break;
    case '&':
      if (olen > 4) {
        *out++ = '&';
        *out++ = 'a';
        *out++ = 'm';
        *out++ = 'p';
        *out++ = ';';
        olen -= 5;
      }
      in++;
      len += 5;
      break;
    case '\'':
      if (olen > 5) {
        *out++ = '&';
        *out++ = 'a';
        *out++ = 'p';
        *out++ = 'o';
        *out++ = 's';
        *out++ = ';';
        olen -= 6;
      }
      in++;
      len += 6;
      break;
    case '>':
      if (olen > 3) {
        *out++ = '&';
        *out++ = 'g';
        *out++ = 't';
        *out++ = ';';
        olen -= 4;
      }
      in++;
      len += 4;
      break;
    case '<':
      if (olen > 3) {
        *out++ = '&';
        *out++ = 'l';
        *out++ = 't';
        *out++ = ';';
        olen -= 4;
      }
      in++;
      len += 4;
      break;
    case '"':
      if (olen > 5) {
        *out++ = '&';
        *out++ = 'q';
        *out++ = 'u';
        *out++ = 'o';
        *out++ = 't';
        *out++ = ';';
        olen -= 6;
      }
      in++;
      len += 6;
      break;
    default:
      if ((*in & 0x80) == 0x00) {
        if (olen > 0) {
          *out++ = *in++;
          olen--;
        } else
          in++;
        len++;
      } else if (ilen > 0 && (*in & 0xe0) == 0xc0 && (*(in + 1) & 0xc0) == 0x80) {
        if (olen > 1) {
          *out++ = *in++;
          *out++ = *in++;
          olen -= 2;
        } else
          in += 2;
        len += 2;
        ilen--;
      } else if (ilen > 1 && (*in & 0xf0) == 0xe0 && (*(in + 1) & 0xc0) == 0x80 && (*(in + 2) & 0xc0) == 0x80) {
        if (olen > 2) {
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          olen -= 3;
        } else
          in += 3;
        len += 3;
        ilen -= 2;
      } else if (ilen > 2 && (*in & 0xf8) == 0xf0 && (*(in + 1) & 0xc0) == 0x80 && (*(in + 2) & 0xc0) == 0x80 && (*(in + 3) & 0xc0) == 0x80) {
        if (olen > 3) {
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          olen -= 4;
        } else
          in += 4;
        len += 4;
        ilen -= 3;
      } else if (ilen > 3 && (*in & 0xfc) == 0xf8 && (*(in + 1) & 0xc0) == 0x80 && (*(in + 2) & 0xc0) == 0x80 && (*(in + 3) & 0xc0) == 0x80 && (*(in + 4) & 0xc0) == 0x80) {
        if (olen > 4) {
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          olen -= 5;
        } else
          in += 5;
        len += 5;
        ilen -= 4;
      } else if (ilen > 4 && (*in & 0xfe) == 0xfc && (*(in + 1) & 0xc0) == 0x80 && (*(in + 2) & 0xc0) == 0x80 && (*(in + 3) & 0xc0) == 0x80 && (*(in + 4) & 0xc0) == 0x80 && (*(in + 5) & 0xc0) == 0x80) {
        if (olen > 5) {
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          olen -= 6;
        } else
          in += 6;
        len += 6;
        ilen -= 5;
      } else
        return (-1);
      break;
    }
  return (len);
}
```