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

```asm
<ceph_armor_line_break>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    %rdx,-0x58(%rbp)
  mov    %rcx,-0x60(%rbp)
  mov    %r8d,-0x64(%rbp)
  movl   $0x0,-0x30(%rbp)
  movl   $0x0,-0x2c(%rbp)
  jmp    L91
L90:
  mov    -0x58(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x58(%rbp)
  movzbl (%rax),%eax
  mov    %al,-0x33(%rbp)
  movzbl -0x33(%rbp),%eax
  shr    $0x2,%al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <encode_bits@plt>
  movsbl %al,%edx
  mov    -0x50(%rbp),%rcx
  lea    -0x48(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <set_str_val@plt>
  mov    %eax,-0x28(%rbp)
  cmpl   $0x0,-0x28(%rbp)
  jns    L189
  mov    -0x28(%rbp),%eax
  jmp    L5
L189:
  mov    -0x58(%rbp),%rax
  cmp    -0x60(%rbp),%rax
  jae    L209
  mov    -0x58(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x58(%rbp)
  movzbl (%rax),%eax
  mov    %al,-0x32(%rbp)
  movzbl -0x33(%rbp),%eax
  shl    $0x4,%eax
  and    $0x30,%eax
  mov    %eax,%edx
  movzbl -0x32(%rbp),%eax
  shr    $0x4,%al
  or     %edx,%eax
  movzbl %al,%eax
  mov    %eax,%edi
  call   <encode_bits@plt>
  movsbl %al,%edx
  mov    -0x50(%rbp),%rcx
  lea    -0x48(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <set_str_val@plt>
  mov    %eax,-0x18(%rbp)
  cmpl   $0x0,-0x18(%rbp)
  jns    L212
  mov    -0x18(%rbp),%eax
  jmp    L5
L212:
  mov    -0x58(%rbp),%rax
  cmp    -0x60(%rbp),%rax
  jae    L186
  mov    -0x58(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x58(%rbp)
  movzbl (%rax),%eax
  mov    %al,-0x31(%rbp)
  movzbl -0x32(%rbp),%eax
  shl    $0x2,%eax
  and    $0x3c,%eax
  mov    %eax,%edx
  movzbl -0x31(%rbp),%eax
  shr    $0x6,%al
  or     %edx,%eax
  movzbl %al,%eax
  mov    %eax,%edi
  call   <encode_bits@plt>
  movsbl %al,%edx
  mov    -0x50(%rbp),%rcx
  lea    -0x48(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <set_str_val@plt>
  mov    %eax,-0xc(%rbp)
  cmpl   $0x0,-0xc(%rbp)
  jns    L243
  mov    -0xc(%rbp),%eax
  jmp    L5
L243:
  movzbl -0x31(%rbp),%eax
  and    $0x3f,%eax
  mov    %eax,%edi
  call   <encode_bits@plt>
  movsbl %al,%edx
  mov    -0x50(%rbp),%rcx
  lea    -0x48(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <set_str_val@plt>
  mov    %eax,-0x8(%rbp)
  cmpl   $0x0,-0x8(%rbp)
  jns    L81
  mov    -0x8(%rbp),%eax
  jmp    L5
L186:
  movzbl -0x32(%rbp),%eax
  shl    $0x2,%eax
  movzbl %al,%eax
  and    $0x3c,%eax
  mov    %eax,%edi
  call   <encode_bits@plt>
  movsbl %al,%edx
  mov    -0x50(%rbp),%rcx
  lea    -0x48(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <set_str_val@plt>
  mov    %eax,-0x14(%rbp)
  cmpl   $0x0,-0x14(%rbp)
  jns    L111
  mov    -0x14(%rbp),%eax
  jmp    L5
L111:
  mov    -0x50(%rbp),%rcx
  lea    -0x48(%rbp),%rax
  mov    $0x3d,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <set_str_val@plt>
  mov    %eax,-0x10(%rbp)
  cmpl   $0x0,-0x10(%rbp)
  jns    L81
  mov    -0x10(%rbp),%eax
  jmp    L5
L209:
  movzbl -0x33(%rbp),%eax
  shl    $0x4,%eax
  movzbl %al,%eax
  and    $0x30,%eax
  mov    %eax,%edi
  call   <encode_bits@plt>
  movsbl %al,%edx
  mov    -0x50(%rbp),%rcx
  lea    -0x48(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <set_str_val@plt>
  mov    %eax,-0x24(%rbp)
  cmpl   $0x0,-0x24(%rbp)
  jns    L165
  mov    -0x24(%rbp),%eax
  jmp    L5
L165:
  mov    -0x50(%rbp),%rcx
  lea    -0x48(%rbp),%rax
  mov    $0x3d,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <set_str_val@plt>
  mov    %eax,-0x20(%rbp)
  cmpl   $0x0,-0x20(%rbp)
  jns    L82
  mov    -0x20(%rbp),%eax
  jmp    L5
L82:
  mov    -0x50(%rbp),%rcx
  lea    -0x48(%rbp),%rax
  mov    $0x3d,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <set_str_val@plt>
  mov    %eax,-0x1c(%rbp)
  cmpl   $0x0,-0x1c(%rbp)
  jns    L81
  mov    -0x1c(%rbp),%eax
  jmp    L5
L81:
  addl   $0x4,-0x30(%rbp)
  addl   $0x4,-0x2c(%rbp)
  cmpl   $0x0,-0x64(%rbp)
  je     L91
  mov    -0x2c(%rbp),%eax
  cmp    -0x64(%rbp),%eax
  jne    L91
  movl   $0x0,-0x2c(%rbp)
  mov    -0x50(%rbp),%rcx
  lea    -0x48(%rbp),%rax
  mov    $0xa,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <set_str_val@plt>
  mov    %eax,-0x4(%rbp)
  cmpl   $0x0,-0x4(%rbp)
  jns    L34
  mov    -0x4(%rbp),%eax
  jmp    L5
L34:
  addl   $0x1,-0x30(%rbp)
L91:
  mov    -0x58(%rbp),%rax
  cmp    -0x60(%rbp),%rax
  jb     L90
  mov    -0x30(%rbp),%eax
L5:
  leave
  ret
```

assistant: ```c
int ceph_armor_line_break(char *dst, const char *dst_end, const char *src, const char *end, int line_width) {
  int olen = 0;
  int line = 0;
  while (src < end) {
    unsigned char a;
    a = *src++;
    do {
      int __ret = set_str_val(&dst, dst_end, encode_bits(a >> 2));
      if (__ret < 0)
        return __ret;
    } while (0);
    ;
    if (src < end) {
      unsigned char b;
      b = *src++;
      do {
        int __ret = set_str_val(&dst, dst_end, encode_bits(((a & 3) << 4) | (b >> 4)));
        if (__ret < 0)
          return __ret;
      } while (0);
      ;
      if (src < end) {
        unsigned char c;
        c = *src++;
        do {
          int __ret = set_str_val(&dst, dst_end, encode_bits(((b & 15) << 2) | (c >> 6)));
          if (__ret < 0)
            return __ret;
        } while (0);
        ;
        do {
          int __ret = set_str_val(&dst, dst_end, encode_bits(c & 63));
          if (__ret < 0)
            return __ret;
        } while (0);
        ;
      } else {
        do {
          int __ret = set_str_val(&dst, dst_end, encode_bits((b & 15) << 2));
          if (__ret < 0)
            return __ret;
        } while (0);
        ;
        do {
          int __ret = set_str_val(&dst, dst_end, '=');
          if (__ret < 0)
            return __ret;
        } while (0);
        ;
      }
    } else {
      do {
        int __ret = set_str_val(&dst, dst_end, encode_bits(((a & 3) << 4)));
        if (__ret < 0)
          return __ret;
      } while (0);
      ;
      do {
        int __ret = set_str_val(&dst, dst_end, '=');
        if (__ret < 0)
          return __ret;
      } while (0);
      ;
      do {
        int __ret = set_str_val(&dst, dst_end, '=');
        if (__ret < 0)
          return __ret;
      } while (0);
      ;
    }
    olen += 4;
    line += 4;
    if (line_width && line == line_width) {
      line = 0;
      do {
        int __ret = set_str_val(&dst, dst_end, '\n');
        if (__ret < 0)
          return __ret;
      } while (0);
      ;
      olen++;
    }
  }
  return olen;
}
```