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

```asm
<jachness_device>:
  endbr64
  mov    %edx,%r8d
  mov    %rdi,%rcx
  mov    %rsi,%rax
  mov    %r8d,%edi
  lea    0x3e(%rdx),%esi
  add    $0x1f,%edx
  cmovns %edx,%esi
  sar    $0x1f,%edi
  shr    $0x1d,%edi
  lea    (%r8,%rdi,1),%edx
  sar    $0x5,%esi
  and    $0x7,%edx
  sub    %edi,%edx
  cmp    $0x7,%edx
  ja     L13
  lea    D1(%rip),%rdi
  movslq (%rdi,%rdx,4),%rdx
  add    %rdi,%rdx
  notrack jmp *%rdx
  nopl   (%rax)
L47:
  movzbl (%rcx),%edx
  add    $0x19,%rax
  add    $0x19,%rcx
  mov    %dl,-0x19(%rax)
  movzbl -0x18(%rcx),%edx
  mov    %dl,-0x18(%rax)
  movzbl -0x17(%rcx),%edx
  mov    %dl,-0x17(%rax)
  movzbl -0x16(%rcx),%edx
  mov    %dl,-0x16(%rax)
  movzbl -0x15(%rcx),%edx
  mov    %dl,-0x15(%rax)
  movzbl -0x14(%rcx),%edx
  mov    %dl,-0x14(%rax)
  movzbl -0x13(%rcx),%edx
  mov    %dl,-0x13(%rax)
  movzbl -0x12(%rcx),%edx
  mov    %dl,-0x12(%rax)
  movzbl -0x11(%rcx),%edx
  mov    %dl,-0x11(%rax)
  movzbl -0x10(%rcx),%edx
  mov    %dl,-0x10(%rax)
  movzbl -0xf(%rcx),%edx
  mov    %dl,-0xf(%rax)
  movzbl -0xe(%rcx),%edx
  mov    %dl,-0xe(%rax)
  movzbl -0xd(%rcx),%edx
  mov    %dl,-0xd(%rax)
  movzbl -0xc(%rcx),%edx
  mov    %dl,-0xc(%rax)
  movzbl -0xb(%rcx),%edx
  mov    %dl,-0xb(%rax)
  movzbl -0xa(%rcx),%edx
  mov    %dl,-0xa(%rax)
  movzbl -0x9(%rcx),%edx
  mov    %dl,-0x9(%rax)
  movzbl -0x8(%rcx),%edx
  mov    %dl,-0x8(%rax)
  movzbl -0x7(%rcx),%edx
  mov    %dl,-0x7(%rax)
  movzbl -0x6(%rcx),%edx
  mov    %dl,-0x6(%rax)
  movzbl -0x5(%rcx),%edx
  mov    %dl,-0x5(%rax)
  movzbl -0x4(%rcx),%edx
  mov    %dl,-0x4(%rax)
  movzbl -0x3(%rcx),%edx
  mov    %dl,-0x3(%rax)
  movzbl -0x2(%rcx),%edx
  mov    %dl,-0x2(%rax)
  movzbl -0x1(%rcx),%edx
  mov    %dl,-0x1(%rax)
  movzbl (%rcx),%edx
  add    $0x1,%rax
  add    $0x1,%rcx
  mov    %dl,-0x1(%rax)
  lea    0x1(%rcx),%rdi
  movzbl (%rcx),%ecx
  lea    0x1(%rax),%rdx
  mov    %cl,(%rax)
L44:
  lea    0x1(%rdi),%rcx
  movzbl (%rdi),%edi
  lea    0x1(%rdx),%rax
  mov    %dil,(%rdx)
  movzbl (%rcx),%edx
  lea    0x1(%rcx),%r10
  lea    0x1(%rax),%r9
  mov    %dl,(%rax)
L41:
  movzbl (%r10),%eax
  lea    0x1(%r10),%rdi
  lea    0x1(%r9),%rdx
  mov    %al,(%r9)
L26:
  lea    0x1(%rdi),%rcx
  movzbl (%rdi),%edi
  lea    0x1(%rdx),%rax
  mov    %dil,(%rdx)
  movzbl (%rcx),%edx
  sub    $0x1,%esi
  add    $0x1,%rcx
  add    $0x1,%rax
  mov    %dl,-0x1(%rax)
  test   %esi,%esi
  jg     L47
L13:
  mov    %r8d,%eax
  ret
  xchg   %ax,%ax
  mov    %rax,%rdx
  mov    %rcx,%rdi
  jmp    L44
  nopl   0x0(%rax,%rax,1)
  mov    %rax,%rdx
  mov    %rcx,%rdi
  jmp    L26
  nopl   0x0(%rax,%rax,1)
  mov    %rax,%r9
  mov    %rcx,%r10
  jmp    L41
```

assistant: ```c
int jachness_device(char *from, char *to, int count) {
  {
    int n = (count + 31) / 32;
    switch (count % 8) {
    case 0:
      goto again32;
      {
      again32:
        *to++ = *from++;
      case 31:
        *to++ = *from++;
      case 30:
        *to++ = *from++;
      case 29:
        *to++ = *from++;
      case 28:
        *to++ = *from++;
      case 27:
        *to++ = *from++;
      case 26:
        *to++ = *from++;
      case 25:
        *to++ = *from++;
      case 24:
      again24:
        *to++ = *from++;
      case 23:
        *to++ = *from++;
      case 22:
        *to++ = *from++;
      case 21:
        *to++ = *from++;
      case 20:
        *to++ = *from++;
      case 19:
        *to++ = *from++;
      case 18:
        *to++ = *from++;
      case 17:
        *to++ = *from++;
      case 16:
      again16:
        *to++ = *from++;
      case 15:
        *to++ = *from++;
      case 14:
        *to++ = *from++;
      case 13:
        *to++ = *from++;
      case 12:
        *to++ = *from++;
      case 11:
        *to++ = *from++;
      case 10:
        *to++ = *from++;
      case 9:
        *to++ = *from++;
      case 8:
      again8:
        *to++ = *from++;
      case 7:
        *to++ = *from++;
      case 6:
        *to++ = *from++;
      case 5:
        *to++ = *from++;
      case 4:
        *to++ = *from++;
      case 3:
        *to++ = *from++;
      case 2:
        *to++ = *from++;
      case 1:
        *to++ = *from++;
      };
      if (--n > 0)
        goto again32;
    }
  }
  return count;
}
```