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

```asm
<collapse_continuations>:
  endbr64
  push   %r15
  mov    $0xa,%esi
  mov    %rdi,%r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %rdi,0x8(%rsp)
  call   <strchr@plt>
  test   %rax,%rax
  je     L335
  mov    %rax,%rbx
  mov    %rax,%r12
  cmp    %rax,%r15
  jb     L53
  jmp    L454
  nopw   0x0(%rax,%rax,1)
L158:
  sub    $0x1,%r12
  cmp    %r12,0x8(%rsp)
  je     L454
L53:
  cmpb   $0x5c,-0x1(%r12)
  je     L158
L454:
  cmpb   $0x0,(%rbx)
  je     L184
  mov    0x8(%rsp),%rax
  lea    -0x1(%rax),%r13
L143:
  lea    -0x1(%rbx),%r14
  lea    0x1(%rbx),%rbp
  cmp    %r14,0x8(%rsp)
  ja     L76
  lea    -0x1(%r12),%rdx
  xor    %r15d,%r15d
  xor    %r8d,%r8d
  jmp    L327
  nopl   (%rax)
L403:
  sub    $0x1,%r14
  cmp    %r13,%r14
  je     L79
L327:
  cmpb   $0x5c,(%r14)
  jne    L79
  cmp    $0x1,%r8d
  sbb    $0xffffffff,%r15d
  xor    $0x1,%r8d
  cmp    %rbx,%rdx
  jne    L403
  xor    %eax,%eax
  sub    $0x1,%r14
  mov    %r8d,0x1c(%rsp)
  mov    %rdx,0x10(%rsp)
  call   <abort@plt>
  mov    0x1c(%rsp),%r8d
  mov    0x10(%rsp),%rdx
  cmp    %r13,%r14
  jne    L327
  nopl   0x0(%rax)
L79:
  test   %r15d,%r15d
  je     L427
  mov    %r15,%rdx
  mov    $0x5c,%esi
  mov    %r12,%rdi
  mov    %r8d,0x10(%rsp)
  call   <memset@plt>
  mov    0x10(%rsp),%r8d
  add    %r12,%r15
L111:
  test   %r8d,%r8d
  jne    L270
L236:
  movb   $0xa,(%r15)
  lea    0x1(%r15),%r12
L262:
  movzbl 0x0(%rbp),%eax
  jmp    L233
  nopl   (%rax)
L0:
  mov    %al,(%r12)
  add    $0x1,%r12
  movzbl 0x1(%rbp),%eax
  mov    %rdx,%rbp
L233:
  test   %al,%al
  je     L184
L8:
  lea    0x1(%rbp),%rdx
  cmp    $0x5c,%al
  jne    L0
  movzbl 0x1(%rbp),%esi
L81:
  mov    %esi,%eax
  mov    %rdx,%rbx
  cmp    $0x5c,%sil
  jne    L255
  xchg   %ax,%ax
L376:
  movzbl 0x1(%rbx),%eax
  add    $0x1,%rbx
  cmp    $0x5c,%al
  je     L376
L255:
  cmp    $0xa,%al
  je     L143
  cmp    %rbp,%rbx
  jbe    L81
  mov    %rbx,%rsi
  mov    %r12,%rax
  sub    %rbp,%rsi
  sub    %rdx,%rax
  lea    -0x1(%rsi),%r8
  cmp    $0xe,%rax
  jbe    L375
  cmp    $0x6,%r8
  jbe    L375
  cmp    $0xe,%r8
  jbe    L421
  mov    %rsi,%rdx
  xor    %eax,%eax
  and    $0xfffffffffffffff0,%rdx
L382:
  movdqu 0x0(%rbp,%rax,1),%xmm0
  movups %xmm0,(%r12,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rdx
  jne    L382
  mov    %rsi,%rdi
  and    $0xfffffffffffffff0,%rdi
  lea    0x0(%rbp,%rdi,1),%rax
  lea    (%r12,%rdi,1),%rdx
  cmp    %rdi,%rsi
  je     L224
  mov    %rsi,%r9
  sub    %rdi,%r9
  lea    -0x1(%r9),%r10
  cmp    $0x6,%r10
  jbe    L290
L161:
  mov    0x0(%rbp,%rdi,1),%r10
  mov    %r10,(%r12,%rdi,1)
  mov    %r9,%rdi
  and    $0xfffffffffffffff8,%rdi
  add    %rdi,%rax
  add    %rdi,%rdx
  cmp    %rdi,%r9
  je     L224
L290:
  movzbl (%rax),%edi
  mov    %dil,(%rdx)
  lea    0x1(%rax),%rdi
  cmp    %rdi,%rbx
  jbe    L224
  movzbl 0x1(%rax),%edi
  mov    %dil,0x1(%rdx)
  lea    0x2(%rax),%rdi
  cmp    %rdi,%rbx
  jbe    L224
  movzbl 0x2(%rax),%edi
  mov    %dil,0x2(%rdx)
  lea    0x3(%rax),%rdi
  cmp    %rdi,%rbx
  jbe    L224
  movzbl 0x3(%rax),%edi
  mov    %dil,0x3(%rdx)
  lea    0x4(%rax),%rdi
  cmp    %rdi,%rbx
  jbe    L224
  movzbl 0x4(%rax),%edi
  mov    %dil,0x4(%rdx)
  lea    0x5(%rax),%rdi
  cmp    %rdi,%rbx
  jbe    L224
  movzbl 0x5(%rax),%edi
  mov    %dil,0x5(%rdx)
  lea    0x6(%rax),%rdi
  cmp    %rdi,%rbx
  jbe    L224
  movzbl 0x6(%rax),%eax
  mov    %al,0x6(%rdx)
L224:
  movzbl 0x1(%rbp,%r8,1),%eax
  add    %rsi,%r12
  mov    %rbx,%rbp
  test   %al,%al
  jne    L8
  nopw   0x0(%rax,%rax,1)
L184:
  movb   $0x0,(%r12)
L335:
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L375:
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L410:
  movzbl 0x0(%rbp,%rax,1),%edx
  mov    %dl,(%r12,%rax,1)
  add    $0x1,%rax
  cmp    %rax,%rsi
  jne    L410
  jmp    L224
L421:
  mov    %rsi,%r9
  mov    %r12,%rdx
  mov    %rbp,%rax
  xor    %edi,%edi
  jmp    L161
L270:
  mov    %rbp,%rdi
  call   <next_token@plt>
  mov    %rax,%rbp
  cmp    %r15,0x8(%rsp)
  jb     L202
  jmp    L432
  nopl   0x0(%rax,%rax,1)
L289:
  lea    -0x1(%r15),%rax
  cmp    %rax,0x8(%rsp)
  je     L260
  mov    %rax,%r15
L202:
  movzbl -0x1(%r15),%eax
  cmp    $0x20,%al
  je     L289
  cmp    $0x9,%al
  je     L289
L432:
  lea    0x1(%r15),%r12
L361:
  movb   $0x20,(%r15)
  jmp    L262
L260:
  mov    %r15,%r12
  mov    0x8(%rsp),%r15
  jmp    L361
L76:
  mov    %r12,%r15
  jmp    L236
L427:
  mov    %r12,%r15
  jmp    L111
```

assistant: ```c
void collapse_continuations(char *line) {
  register char *in, *out, *p;
  register int backslash;
  register unsigned int bs_write;
  in = strchr(line, '\n');
  if (in == 0)
    return;
  out = in;
  while (out > line && out[-1] == '\\')
    --out;
  while (*in != '\0') {
    backslash = 0;
    bs_write = 0;
    for (p = in - 1; p >= line && *p == '\\'; --p) {
      if (backslash)
        ++bs_write;
      backslash = !backslash;
      if (in == out - 1)
        abort();
    }
    while (bs_write-- > 0)
      *out++ = '\\';
    ++in;
    if (backslash) {
      in = next_token(in);
      while (out > line && (((unsigned char)out[-1]) == ' ' || ((unsigned char)out[-1]) == '\t'))
        --out;
      *out++ = ' ';
    } else
      *out++ = '\n';
    while (*in != '\0')
      if (*in == '\\') {
        p = in + 1;
        while (*p == '\\')
          ++p;
        if (*p == '\n') {
          in = p;
          break;
        }
        while (in < p)
          *out++ = *in++;
      } else
        *out++ = *in++;
  }
  *out = '\0';
}
```