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

```asm
<punycode_encode>:
  endbr64
  push   %r15
  mov    %rcx,%r10
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x38,%rsp
  test   %rsi,%rsi
  je     L61
  mov    %rdx,%r11
  mov    %rdi,%r13
  mov    (%rcx),%rdx
  mov    %rsi,%r14
  xor    %r15d,%r15d
  xor    %r12d,%r12d
  jmp    L188
  nopw   0x0(%rax,%rax,1)
L79:
  mov    0x0(%r13,%r12,4),%eax
  cmp    $0x7f,%eax
  jg     L60
  mov    %al,(%r11,%r15,1)
  mov    (%r10),%rdx
  add    $0x1,%r15
L60:
  add    $0x1,%r12
  cmp    %r12,%r14
  je     L10
L188:
  cmp    %r15,%rdx
  ja     L79
  mov    %r15,0x18(%rsp)
  test   %r15,%r15
  je     L33
L254:
  cmp    0x18(%rsp),%r14
  jbe    L206
  mov    (%r10),%rdx
L33:
  lea    0x0(%r13,%r14,4),%r8
  mov    0x18(%rsp),%r9
  mov    %r11,0x28(%rsp)
  xor    %esi,%esi
  mov    %r15,%r11
  mov    $0x80,%eax
  mov    $0x48,%edi
  mov    %r8,%r15
L14:
  cmp    %rdx,%r11
  jae    L157
  mov    D8(%rip),%rdx
  mov    (%rdx),%r12
  mov    %r13,%rdx
  mov    %r12,%rbx
  nopl   0x0(%rax)
L171:
  movslq (%rdx),%rcx
  cmp    %rcx,%rbx
  mov    %rcx,%r8
  cmovbe %rbx,%r8
  cmp    %rax,%rcx
  cmovae %r8,%rbx
  add    $0x4,%rdx
  cmp    %rdx,%r15
  jne    L171
  mov    %rbx,%rcx
  lea    0x1(%r9),%rbp
  xor    %edx,%edx
  sub    %rax,%rcx
  mov    %r12,%rax
  sub    %rsi,%rax
  div    %rbp
  cmp    %rcx,%rax
  jb     L147
  imul   %rcx,%rbp
  mov    %r15,0x20(%rsp)
  xor    %r12d,%r12d
  mov    %r11,%r15
  add    %rsi,%rbp
  jmp    L84
  nopw   0x0(%rax,%rax,1)
L163:
  add    $0x1,%rbp
  je     L48
L236:
  add    $0x1,%r12
  cmp    %r12,%r14
  je     L174
L84:
  movslq 0x0(%r13,%r12,4),%rax
  cmp    %rax,%rbx
  ja     L163
  jne    L236
  mov    (%r10),%rcx
  mov    0x28(%rsp),%rax
  mov    %rbp,%rsi
  mov    %r10,0x10(%rsp)
  mov    %r9,0x8(%rsp)
  sub    %r15,%rcx
  lea    (%rax,%r15,1),%rdx
  call   <encode_var_int@plt>
  mov    0x8(%rsp),%r9
  xor    %edx,%edx
  mov    %rbp,%rdi
  add    %rax,%r15
  cmp    0x18(%rsp),%r9
  sete   %dl
  add    $0x1,%r9
  add    $0x1,%r12
  xor    %ebp,%ebp
  mov    %r9,%rsi
  mov    %r9,0x8(%rsp)
  call   <adapt_bias@plt>
  mov    0x10(%rsp),%r10
  mov    0x8(%rsp),%r9
  mov    %rax,%rdi
  cmp    %r12,%r14
  jne    L84
  xchg   %ax,%ax
L174:
  mov    %r15,%r11
  lea    0x1(%rbx),%rax
  mov    0x20(%rsp),%r15
  lea    0x1(%rbp),%rsi
  cmp    %r14,%r9
  jae    L157
  mov    (%r10),%rdx
  jmp    L14
  nopl   (%rax)
L48:
  xor    %edi,%edi
  mov    %r10,0x8(%rsp)
  call   <assert@plt>
  mov    0x8(%rsp),%r10
L206:
  mov    %r15,(%r10)
  add    $0x38,%rsp
  mov    %r12,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  cs nopw 0x0(%rax,%rax,1)
L10:
  test   %r15,%r15
  je     L140
  cmp    %r15,%rdx
  jbe    L187
  movb   $0x2d,(%r11,%r15,1)
  mov    %r15,0x18(%rsp)
  add    $0x1,%r15
  jmp    L254
L140:
  movq   $0x0,0x18(%rsp)
  jmp    L33
L157:
  mov    %r11,%r15
  jmp    L206
L147:
  xor    %edi,%edi
  mov    %r10,0x8(%rsp)
  mov    %r11,%r15
  mov    %r14,%r12
  call   <assert@plt>
  mov    0x8(%rsp),%r10
  jmp    L206
L61:
  xor    %r15d,%r15d
  xor    %r12d,%r12d
  jmp    L206
L187:
  mov    %r15,0x18(%rsp)
  jmp    L254
```

assistant: ```c
size_t punycode_encode(const uint32_t *const src, const size_t srclen, char *const dst, size_t *const dstlen) {
  size_t b, h;
  size_t delta, bias;
  size_t m, n;
  size_t si, di;
  for (si = 0, di = 0; si < srclen && di < *dstlen; si++) {
    if (src[si] < 128) {
      dst[di++] = src[si];
    }
  }
  b = h = di;
  if (di > 0 && di < *dstlen) {
    dst[di++] = '-';
  }
  n = 128;
  bias = 72;
  delta = 0;
  for (; h < srclen && di < *dstlen; n++, delta++) {
    for (m = SIZE_MAX, si = 0; si < srclen; si++) {
      if (src[si] >= n && src[si] < m) {
        m = src[si];
      }
    }
    if ((m - n) > (SIZE_MAX - delta) / (h + 1)) {
      assert(0 && "OVERFLOW");
      goto fail;
    }
    delta += (m - n) * (h + 1);
    n = m;
    for (si = 0; si < srclen; si++) {
      if (src[si] < n) {
        if (++delta == 0) {
          assert(0 && "OVERFLOW");
          goto fail;
        }
      } else if (src[si] == n) {
        di += encode_var_int(bias, delta, &dst[di], *dstlen - di);
        bias = adapt_bias(delta, h + 1, h == b);
        delta = 0;
        h++;
      }
    }
  }
fail:
  *dstlen = di;
  return si;
}
```