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

```asm
<__setkey_r>:
  endbr64
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  mov    %rdi,%rbx
  lea    D2(%rip),%rdi
  sub    $0x18,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  call   <_ufc_setup_salt_r@plt>
  movzbl (%rbx),%edx
  movzbl 0x8(%rbx),%ecx
  movzbl 0x10(%rbx),%esi
  movzbl 0x18(%rbx),%edi
  add    %edx,%edx
  add    %ecx,%ecx
  or     0x1(%rbx),%dl
  or     0x9(%rbx),%cl
  add    %edx,%edx
  add    %ecx,%ecx
  or     0x2(%rbx),%dl
  or     0xa(%rbx),%cl
  add    %edx,%edx
  add    %ecx,%ecx
  or     0x3(%rbx),%dl
  or     0xb(%rbx),%cl
  add    %edx,%edx
  add    %ecx,%ecx
  or     0x4(%rbx),%dl
  or     0xc(%rbx),%cl
  add    %edx,%edx
  add    %ecx,%ecx
  or     0x5(%rbx),%dl
  or     0xd(%rbx),%cl
  add    %edx,%edx
  add    %ecx,%ecx
  or     0x6(%rbx),%dl
  or     0xe(%rbx),%cl
  add    %edx,%edx
  add    %ecx,%ecx
  or     0x7(%rbx),%dl
  or     0xf(%rbx),%cl
  add    %esi,%esi
  or     0x11(%rbx),%sil
  add    %edi,%edi
  or     0x19(%rbx),%dil
  add    %esi,%esi
  add    %edi,%edi
  or     0x12(%rbx),%sil
  or     0x1a(%rbx),%dil
  add    %esi,%esi
  add    %edi,%edi
  or     0x13(%rbx),%sil
  or     0x1b(%rbx),%dil
  add    %esi,%esi
  add    %edi,%edi
  or     0x14(%rbx),%sil
  or     0x1c(%rbx),%dil
  add    %esi,%esi
  add    %edi,%edi
  or     0x15(%rbx),%sil
  or     0x1d(%rbx),%dil
  add    %esi,%esi
  add    %edi,%edi
  or     0x16(%rbx),%sil
  or     0x1e(%rbx),%dil
  add    %esi,%esi
  add    %edi,%edi
  or     0x17(%rbx),%sil
  or     0x1f(%rbx),%dil
  movzbl 0x20(%rbx),%r8d
  movzbl 0x28(%rbx),%r9d
  movzbl 0x30(%rbx),%r10d
  movzbl 0x38(%rbx),%eax
  add    %r8d,%r8d
  or     0x21(%rbx),%r8b
  add    %r8d,%r8d
  or     0x22(%rbx),%r8b
  add    %r8d,%r8d
  or     0x23(%rbx),%r8b
  add    %r9d,%r9d
  or     0x29(%rbx),%r9b
  add    %r9d,%r9d
  or     0x2a(%rbx),%r9b
  add    %r10d,%r10d
  or     0x31(%rbx),%r10b
  add    %r9d,%r9d
  or     0x2b(%rbx),%r9b
  add    %r8d,%r8d
  add    %r10d,%r10d
  or     0x24(%rbx),%r8b
  or     0x32(%rbx),%r10b
  add    %r9d,%r9d
  or     0x2c(%rbx),%r9b
  add    %r8d,%r8d
  add    %r10d,%r10d
  or     0x25(%rbx),%r8b
  or     0x33(%rbx),%r10b
  add    %r9d,%r9d
  or     0x2d(%rbx),%r9b
  add    %r8d,%r8d
  add    %r9d,%r9d
  or     0x26(%rbx),%r8b
  or     0x2e(%rbx),%r9b
  add    %r10d,%r10d
  or     0x34(%rbx),%r10b
  add    %r8d,%r8d
  add    %r9d,%r9d
  or     0x27(%rbx),%r8b
  or     0x2f(%rbx),%r9b
  add    %r10d,%r10d
  or     0x35(%rbx),%r10b
  add    %eax,%eax
  shr    %r9b
  or     0x39(%rbx),%al
  add    %r10d,%r10d
  or     0x36(%rbx),%r10b
  add    %eax,%eax
  or     0x3a(%rbx),%al
  add    %r10d,%r10d
  or     0x37(%rbx),%r10b
  shr    %r10b
  add    %eax,%eax
  or     0x3b(%rbx),%al
  movzbl %r9b,%r9d
  shr    %r8b
  add    %eax,%eax
  or     0x3c(%rbx),%al
  movzbl %r10b,%r10d
  shr    %dl
  add    %eax,%eax
  or     0x3d(%rbx),%al
  movzbl %r8b,%r8d
  shr    %cl
  add    %eax,%eax
  or     0x3e(%rbx),%al
  shr    %sil
  add    %eax,%eax
  or     0x3f(%rbx),%al
  shr    %dil
  movzbl %sil,%esi
  shr    %al
  movzbl %dil,%edi
  movzbl %cl,%ecx
  movzbl %dl,%edx
  movzbl %al,%eax
  shl    $0x8,%rax
  or     %r10,%rax
  shl    $0x8,%rax
  or     %r9,%rax
  shl    $0x8,%rax
  or     %r8,%rax
  shl    $0x8,%rax
  or     %rdi,%rax
  mov    %rsp,%rdi
  shl    $0x8,%rax
  or     %rsi,%rax
  mov    %rbp,%rsi
  shl    $0x8,%rax
  or     %rcx,%rax
  shl    $0x8,%rax
  or     %rdx,%rax
  mov    %rax,(%rsp)
  xor    %eax,%eax
  call   <_ufc_mk_keytab_r@plt>
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L6
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  ret
L6:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: label: D2
type: string

tool: D2: ..

assistant: ```c
void __setkey_r(__key, __data) __const char *__key;
struct crypt_data *__data;
{
  int i, j;
  unsigned char c;
  char ktab[8];
  _ufc_setup_salt_r("..", __data);
  for (i = 0; i < 8; i++) {
    for (j = 0, c = 0; j < 8; j++)
      c = c << 1 | *__key++;
    ktab[i] = c >> 1;
  }
  _ufc_mk_keytab_r(ktab, __data);
}
```