user: What is the c source code of the assembly code below:

```asm
<swab>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  mov    %rdi,%rax
  mov    %rsi,%rcx
  sar    %edx
  add    $0x1,%edx
  jmp    L26
L2:
  mov    %rax,%rsi
  lea    0x1(%rsi),%rax
  movzbl (%rsi),%esi
  movsbq %sil,%rbx
  mov    %rax,%rdi
  lea    0x1(%rdi),%rax
  mov    %rcx,%rsi
  lea    0x1(%rsi),%rcx
  movzbl (%rdi),%edi
  mov    %dil,(%rsi)
  mov    %rcx,%rsi
  lea    0x1(%rsi),%rcx
  mov    %ebx,%edi
  mov    %dil,(%rsi)
L26:
  sub    $0x1,%edx
  mov    %edx,%esi
  and    $0x7,%esi
  test   %esi,%esi
  jne    L2
  sar    $0x3,%edx
  jmp    L3
L32:
  mov    %rax,%rsi
  lea    0x1(%rsi),%rax
  movzbl (%rsi),%esi
  movsbq %sil,%rbx
  mov    %rax,%rdi
  lea    0x1(%rdi),%rax
  mov    %rcx,%rsi
  lea    0x1(%rsi),%rcx
  movzbl (%rdi),%edi
  mov    %dil,(%rsi)
  mov    %rcx,%rsi
  lea    0x1(%rsi),%rcx
  mov    %ebx,%edi
  mov    %dil,(%rsi)
  mov    %rax,%rsi
  lea    0x1(%rsi),%rax
  movzbl (%rsi),%esi
  movsbq %sil,%rbx
  mov    %rax,%rdi
  lea    0x1(%rdi),%rax
  mov    %rcx,%rsi
  lea    0x1(%rsi),%rcx
  movzbl (%rdi),%edi
  mov    %dil,(%rsi)
  mov    %rcx,%rsi
  lea    0x1(%rsi),%rcx
  mov    %ebx,%edi
  mov    %dil,(%rsi)
  mov    %rax,%rsi
  lea    0x1(%rsi),%rax
  movzbl (%rsi),%esi
  movsbq %sil,%rbx
  mov    %rax,%rdi
  lea    0x1(%rdi),%rax
  mov    %rcx,%rsi
  lea    0x1(%rsi),%rcx
  movzbl (%rdi),%edi
  mov    %dil,(%rsi)
  mov    %rcx,%rsi
  lea    0x1(%rsi),%rcx
  mov    %ebx,%edi
  mov    %dil,(%rsi)
  mov    %rax,%rsi
  lea    0x1(%rsi),%rax
  movzbl (%rsi),%esi
  movsbq %sil,%rbx
  mov    %rax,%rdi
  lea    0x1(%rdi),%rax
  mov    %rcx,%rsi
  lea    0x1(%rsi),%rcx
  movzbl (%rdi),%edi
  mov    %dil,(%rsi)
  mov    %rcx,%rsi
  lea    0x1(%rsi),%rcx
  mov    %ebx,%edi
  mov    %dil,(%rsi)
  mov    %rax,%rsi
  lea    0x1(%rsi),%rax
  movzbl (%rsi),%esi
  movsbq %sil,%rbx
  mov    %rax,%rdi
  lea    0x1(%rdi),%rax
  mov    %rcx,%rsi
  lea    0x1(%rsi),%rcx
  movzbl (%rdi),%edi
  mov    %dil,(%rsi)
  mov    %rcx,%rsi
  lea    0x1(%rsi),%rcx
  mov    %ebx,%edi
  mov    %dil,(%rsi)
  mov    %rax,%rsi
  lea    0x1(%rsi),%rax
  movzbl (%rsi),%esi
  movsbq %sil,%rbx
  mov    %rax,%rdi
  lea    0x1(%rdi),%rax
  mov    %rcx,%rsi
  lea    0x1(%rsi),%rcx
  movzbl (%rdi),%edi
  mov    %dil,(%rsi)
  mov    %rcx,%rsi
  lea    0x1(%rsi),%rcx
  mov    %ebx,%edi
  mov    %dil,(%rsi)
  mov    %rax,%rsi
  lea    0x1(%rsi),%rax
  movzbl (%rsi),%esi
  movsbq %sil,%rbx
  mov    %rax,%rdi
  lea    0x1(%rdi),%rax
  mov    %rcx,%rsi
  lea    0x1(%rsi),%rcx
  movzbl (%rdi),%edi
  mov    %dil,(%rsi)
  mov    %rcx,%rsi
  lea    0x1(%rsi),%rcx
  mov    %ebx,%edi
  mov    %dil,(%rsi)
  mov    %rax,%rsi
  lea    0x1(%rsi),%rax
  movzbl (%rsi),%esi
  movsbq %sil,%rbx
  mov    %rax,%rdi
  lea    0x1(%rdi),%rax
  mov    %rcx,%rsi
  lea    0x1(%rsi),%rcx
  movzbl (%rdi),%edi
  mov    %dil,(%rsi)
  mov    %rcx,%rsi
  lea    0x1(%rsi),%rcx
  mov    %ebx,%edi
  mov    %dil,(%rsi)
L3:
  sub    $0x1,%edx
  test   %edx,%edx
  jns    L32
  nop
  nop
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

assistant: ```c
void swab(from, to, n) register char *from, *to;
register int n;
{
  register unsigned long temp;
  n >>= 1;
  n++;
  while ((--n) & 07)
    temp = *from++, *to++ = *from++, *to++ = temp;
  n >>= 3;
  while (--n >= 0) {
    temp = *from++, *to++ = *from++, *to++ = temp;
    temp = *from++, *to++ = *from++, *to++ = temp;
    temp = *from++, *to++ = *from++, *to++ = temp;
    temp = *from++, *to++ = *from++, *to++ = temp;
    temp = *from++, *to++ = *from++, *to++ = temp;
    temp = *from++, *to++ = *from++, *to++ = temp;
    temp = *from++, *to++ = *from++, *to++ = temp;
    temp = *from++, *to++ = *from++, *to++ = temp;
  }
}
```