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

```asm
<clefiadoubleswap>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x48,%rsp
  movzbl 0x1(%rdi),%r11d
  movzbl 0x2(%rdi),%r10d
  mov    %fs:0x28,%rax
  mov    %rax,0x38(%rsp)
  xor    %eax,%eax
  movzbl (%rdi),%eax
  movzbl 0x3(%rdi),%ebx
  mov    %r11d,%r14d
  shl    $0x7,%r11d
  movzbl 0x4(%rdi),%ebp
  movzbl 0x5(%rdi),%r12d
  mov    %eax,%r15d
  shr    %r14b
  movzbl 0x6(%rdi),%r13d
  movzbl 0x7(%rdi),%edx
  shl    $0x7,%r15d
  movzbl 0x8(%rdi),%ecx
  movzbl 0x9(%rdi),%esi
  and    $0xfffffffe,%eax
  or     %r14d,%r15d
  mov    %r10d,%r14d
  shl    $0x7,%r10d
  movzbl 0xa(%rdi),%r8d
  shr    %r14b
  movzbl 0xb(%rdi),%r9d
  or     %r14d,%r11d
  mov    %ebp,%r14d
  shl    $0x7,%ebp
  mov    %r11b,(%rsp)
  mov    %ebx,%r11d
  shr    %r14b
  shr    %r11b
  shl    $0x7,%ebx
  or     %r11d,%r10d
  movzbl 0xc(%rdi),%r11d
  mov    %r10b,0x1e(%rsp)
  mov    %r14d,%r10d
  mov    %r12d,%r14d
  shl    $0x7,%r12d
  shr    %r14b
  or     %r10d,%ebx
  mov    %r14d,%r10d
  mov    %r13d,%r14d
  shl    $0x7,%r13d
  movzbl %bl,%ebx
  shr    %r14b
  or     %r10d,%ebp
  mov    %r14d,%r10d
  mov    %edx,%r14d
  shl    $0x7,%edx
  movzbl %bpl,%ebp
  shr    %r14b
  or     %r10d,%r12d
  mov    %r14d,%r10d
  mov    %ecx,%r14d
  add    %ecx,%ecx
  movzbl %r12b,%r12d
  shr    $0x7,%r14b
  or     %r10d,%r13d
  movzbl 0xf(%rdi),%r10d
  or     %eax,%r14d
  mov    %esi,%eax
  movzbl %r13b,%r13d
  shr    $0x7,%al
  and    $0x7f,%r10d
  movzbl %r14b,%r14d
  or     %eax,%ecx
  mov    %r8d,%eax
  or     %r10d,%edx
  shr    $0x7,%al
  add    %esi,%esi
  add    %r8d,%r8d
  movzbl %dl,%edx
  or     %eax,%esi
  mov    %r9d,%eax
  add    %r9d,%r9d
  shl    $0x8,%rdx
  shr    $0x7,%al
  lea    (%r11,%r11,1),%r10d
  movzbl 0xd(%rdi),%r11d
  or     %r13,%rdx
  or     %eax,%r8d
  movzbl 0xc(%rdi),%eax
  shl    $0x8,%rdx
  add    %r11d,%r11d
  or     %r12,%rdx
  shr    $0x7,%al
  shl    $0x8,%rdx
  or     %eax,%r9d
  movzbl 0xd(%rdi),%eax
  or     %rbp,%rdx
  shl    $0x8,%rdx
  shr    $0x7,%al
  or     %rbx,%rdx
  or     %eax,%r10d
  movzbl 0xe(%rdi),%eax
  shl    $0x8,%rdx
  movzbl %r10b,%r10d
  shr    $0x7,%al
  or     %eax,%r11d
  movzbl 0xf(%rdi),%eax
  movzbl %r11b,%r11d
  shr    $0x7,%al
  mov    %al,0x1f(%rsp)
  movzbl 0xe(%rdi),%eax
  add    %eax,%eax
  or     0x1f(%rsp),%al
  movzbl 0x1e(%rsp),%ebx
  movzbl %al,%eax
  or     %rbx,%rdx
  movzbl (%rsp),%ebx
  shl    $0x8,%rax
  shl    $0x8,%rdx
  or     %r11,%rax
  or     %rbx,%rdx
  movzbl %r15b,%ebx
  shl    $0x8,%rdx
  shl    $0x8,%rax
  or     %r10,%rax
  movzbl %r9b,%r10d
  or     %rbx,%rdx
  shl    $0x8,%rax
  mov    %rdx,(%rsp)
  mov    $0x10,%edx
  mov    %rax,%r9
  movzbl %r8b,%eax
  or     %r10,%r9
  mov    %r9,%r8
  shl    $0x8,%r8
  or     %rax,%r8
  movzbl %sil,%eax
  mov    %r8,%rsi
  shl    $0x8,%rsi
  or     %rax,%rsi
  movzbl %cl,%eax
  mov    %rsi,%rcx
  lea    0x20(%rsp),%rsi
  shl    $0x8,%rcx
  or     %rax,%rcx
  shl    $0x8,%rcx
  or     %r14,%rcx
  mov    %rcx,0x8(%rsp)
  movdqa (%rsp),%xmm0
  movaps %xmm0,0x20(%rsp)
  call   <bytecpy@plt>
  mov    0x38(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L7
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L7:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void clefiadoubleswap(unsigned char *lk) {
  unsigned char t[16];
  t[0] = (lk[0] << 7) | (lk[1] >> 1);
  t[1] = (lk[1] << 7) | (lk[2] >> 1);
  t[2] = (lk[2] << 7) | (lk[3] >> 1);
  t[3] = (lk[3] << 7) | (lk[4] >> 1);
  t[4] = (lk[4] << 7) | (lk[5] >> 1);
  t[5] = (lk[5] << 7) | (lk[6] >> 1);
  t[6] = (lk[6] << 7) | (lk[7] >> 1);
  t[7] = (lk[7] << 7) | (lk[15] & 0x7fu);
  t[8] = (lk[8] >> 7) | (lk[0] & 0xfeu);
  t[9] = (lk[9] >> 7) | (lk[8] << 1);
  t[10] = (lk[10] >> 7) | (lk[9] << 1);
  t[11] = (lk[11] >> 7) | (lk[10] << 1);
  t[12] = (lk[12] >> 7) | (lk[11] << 1);
  t[13] = (lk[13] >> 7) | (lk[12] << 1);
  t[14] = (lk[14] >> 7) | (lk[13] << 1);
  t[15] = (lk[15] >> 7) | (lk[14] << 1);
  bytecpy(lk, t, 16);
}
```