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

```asm
<copy64>:
  endbr64
  lea    0x40(%rdi),%rdx
  mov    %rdi,%rcx
  mov    %rsi,%rax
  cmp    %rdx,%rsi
  jae    L13
  lea    0x100(%rsi),%rdx
  cmp    %rdx,%rdi
  jb     L9
L13:
  movdqu (%rax),%xmm0
  movdqu 0x10(%rax),%xmm6
  movdqu 0x20(%rax),%xmm2
  movdqa %xmm0,%xmm3
  shufps $0xdd,%xmm6,%xmm0
  movdqa %xmm0,%xmm1
  shufps $0x88,%xmm6,%xmm3
  movdqu 0x30(%rax),%xmm6
  movdqa %xmm2,%xmm5
  movdqa %xmm3,%xmm4
  shufps $0x88,%xmm6,%xmm5
  shufps $0xdd,%xmm6,%xmm2
  shufps $0xdd,%xmm5,%xmm4
  shufps $0xdd,%xmm2,%xmm1
  pslld  $0x10,%xmm4
  shufps $0x88,%xmm2,%xmm0
  pslld  $0x18,%xmm1
  shufps $0x88,%xmm5,%xmm3
  pslld  $0x8,%xmm0
  por    %xmm4,%xmm1
  por    %xmm3,%xmm0
  por    %xmm1,%xmm0
  movups %xmm0,(%rcx)
  movdqu 0x40(%rax),%xmm0
  movdqu 0x50(%rax),%xmm6
  movdqu 0x60(%rax),%xmm2
  movdqa %xmm0,%xmm3
  shufps $0xdd,%xmm6,%xmm0
  movdqa %xmm0,%xmm1
  shufps $0x88,%xmm6,%xmm3
  movdqu 0x70(%rax),%xmm6
  movdqa %xmm2,%xmm5
  movdqa %xmm3,%xmm4
  shufps $0x88,%xmm6,%xmm5
  shufps $0xdd,%xmm6,%xmm2
  shufps $0xdd,%xmm5,%xmm4
  shufps $0xdd,%xmm2,%xmm1
  pslld  $0x10,%xmm4
  shufps $0x88,%xmm2,%xmm0
  pslld  $0x18,%xmm1
  shufps $0x88,%xmm5,%xmm3
  pslld  $0x8,%xmm0
  por    %xmm4,%xmm1
  por    %xmm3,%xmm0
  por    %xmm1,%xmm0
  movups %xmm0,0x10(%rcx)
  movdqu 0x80(%rax),%xmm0
  movdqu 0x90(%rax),%xmm6
  movdqu 0xa0(%rax),%xmm2
  movdqa %xmm0,%xmm3
  shufps $0xdd,%xmm6,%xmm0
  movdqa %xmm0,%xmm1
  shufps $0x88,%xmm6,%xmm3
  movdqu 0xb0(%rax),%xmm6
  movdqa %xmm2,%xmm5
  movdqa %xmm3,%xmm4
  shufps $0x88,%xmm6,%xmm5
  shufps $0xdd,%xmm6,%xmm2
  shufps $0xdd,%xmm5,%xmm4
  shufps $0xdd,%xmm2,%xmm1
  pslld  $0x10,%xmm4
  shufps $0x88,%xmm2,%xmm0
  pslld  $0x18,%xmm1
  shufps $0x88,%xmm5,%xmm3
  pslld  $0x8,%xmm0
  por    %xmm4,%xmm1
  por    %xmm3,%xmm0
  por    %xmm1,%xmm0
  movups %xmm0,0x20(%rcx)
  movdqu 0xc0(%rax),%xmm0
  movdqu 0xe0(%rax),%xmm2
  movdqu 0xd0(%rax),%xmm4
  movdqu 0xf0(%rax),%xmm1
  movdqa %xmm0,%xmm3
  movdqa %xmm2,%xmm5
  shufps $0xdd,%xmm4,%xmm0
  shufps $0x88,%xmm1,%xmm5
  shufps $0xdd,%xmm1,%xmm2
  shufps $0x88,%xmm4,%xmm3
  movdqa %xmm0,%xmm1
  movdqa %xmm3,%xmm4
  shufps $0x88,%xmm2,%xmm0
  shufps $0x88,%xmm5,%xmm3
  pslld  $0x8,%xmm0
  shufps $0xdd,%xmm2,%xmm1
  shufps $0xdd,%xmm5,%xmm4
  pslld  $0x18,%xmm1
  pslld  $0x10,%xmm4
  por    %xmm3,%xmm0
  por    %xmm4,%xmm1
  por    %xmm1,%xmm0
  movups %xmm0,0x30(%rcx)
  ret
  cs nopw 0x0(%rax,%rax,1)
L9:
  mov    0xc(%rsi),%edx
  mov    0x8(%rsi),%esi
  shl    $0x18,%edx
  shl    $0x10,%esi
  or     %esi,%edx
  mov    0x4(%rax),%esi
  or     (%rax),%edx
  shl    $0x8,%esi
  or     %esi,%edx
  mov    %edx,(%rdi)
  mov    0x1c(%rax),%edx
  mov    0x18(%rax),%esi
  shl    $0x18,%edx
  shl    $0x10,%esi
  or     %esi,%edx
  mov    0x14(%rax),%esi
  or     0x10(%rax),%edx
  shl    $0x8,%esi
  or     %esi,%edx
  mov    %edx,0x4(%rdi)
  mov    0x2c(%rax),%edx
  mov    0x28(%rax),%esi
  shl    $0x18,%edx
  shl    $0x10,%esi
  or     %esi,%edx
  mov    0x24(%rax),%esi
  or     0x20(%rax),%edx
  shl    $0x8,%esi
  or     %esi,%edx
  mov    %edx,0x8(%rdi)
  mov    0x3c(%rax),%edx
  mov    0x38(%rax),%esi
  shl    $0x18,%edx
  shl    $0x10,%esi
  or     %esi,%edx
  mov    0x34(%rax),%esi
  or     0x30(%rax),%edx
  shl    $0x8,%esi
  or     %esi,%edx
  mov    %edx,0xc(%rdi)
  mov    0x4c(%rax),%edx
  mov    0x48(%rax),%esi
  shl    $0x18,%edx
  shl    $0x10,%esi
  or     %esi,%edx
  mov    0x44(%rax),%esi
  or     0x40(%rax),%edx
  shl    $0x8,%esi
  or     %esi,%edx
  mov    %edx,0x10(%rdi)
  mov    0x5c(%rax),%edx
  mov    0x58(%rax),%esi
  shl    $0x18,%edx
  shl    $0x10,%esi
  or     %esi,%edx
  mov    0x54(%rax),%esi
  or     0x50(%rax),%edx
  shl    $0x8,%esi
  or     %esi,%edx
  mov    %edx,0x14(%rdi)
  mov    0x6c(%rax),%edx
  mov    0x68(%rax),%esi
  shl    $0x18,%edx
  shl    $0x10,%esi
  or     %esi,%edx
  or     0x60(%rax),%edx
  mov    0x64(%rax),%esi
  shl    $0x8,%esi
  or     %esi,%edx
  mov    %edx,0x18(%rdi)
  mov    0x7c(%rax),%edx
  mov    0x78(%rax),%esi
  shl    $0x18,%edx
  shl    $0x10,%esi
  or     %esi,%edx
  mov    0x74(%rax),%esi
  or     0x70(%rax),%edx
  shl    $0x8,%esi
  or     %esi,%edx
  mov    %edx,0x1c(%rdi)
  mov    0x8c(%rax),%edx
  mov    0x88(%rax),%esi
  shl    $0x18,%edx
  shl    $0x10,%esi
  or     %esi,%edx
  mov    0x84(%rax),%esi
  or     0x80(%rax),%edx
  shl    $0x8,%esi
  or     %esi,%edx
  mov    %edx,0x20(%rdi)
  mov    0x9c(%rax),%edx
  mov    0x98(%rax),%esi
  shl    $0x18,%edx
  shl    $0x10,%esi
  or     %esi,%edx
  mov    0x94(%rax),%esi
  or     0x90(%rax),%edx
  shl    $0x8,%esi
  or     %esi,%edx
  mov    %edx,0x24(%rdi)
  mov    0xac(%rax),%edx
  mov    0xa8(%rax),%esi
  shl    $0x18,%edx
  shl    $0x10,%esi
  or     %esi,%edx
  mov    0xa4(%rax),%esi
  or     0xa0(%rax),%edx
  shl    $0x8,%esi
  or     %esi,%edx
  mov    %edx,0x28(%rdi)
  mov    0xbc(%rax),%edx
  mov    0xb8(%rax),%esi
  shl    $0x18,%edx
  shl    $0x10,%esi
  or     %esi,%edx
  mov    0xb4(%rax),%esi
  or     0xb0(%rax),%edx
  shl    $0x8,%esi
  or     %esi,%edx
  mov    %edx,0x2c(%rdi)
  mov    0xcc(%rax),%edx
  mov    0xc8(%rax),%esi
  shl    $0x18,%edx
  shl    $0x10,%esi
  or     %esi,%edx
  mov    0xc4(%rax),%esi
  or     0xc0(%rax),%edx
  shl    $0x8,%esi
  or     %esi,%edx
  mov    %edx,0x30(%rdi)
  mov    0xdc(%rax),%edx
  mov    0xd8(%rax),%esi
  shl    $0x18,%edx
  shl    $0x10,%esi
  or     %esi,%edx
  mov    0xd4(%rax),%esi
  or     0xd0(%rax),%edx
  shl    $0x8,%esi
  or     %esi,%edx
  mov    %edx,0x34(%rdi)
  mov    0xec(%rax),%edx
  mov    0xe8(%rax),%esi
  shl    $0x18,%edx
  shl    $0x10,%esi
  or     %esi,%edx
  mov    0xe4(%rax),%esi
  or     0xe0(%rax),%edx
  shl    $0x8,%esi
  or     %esi,%edx
  mov    %edx,0x38(%rdi)
  mov    0xf8(%rax),%edx
  mov    0xfc(%rax),%esi
  shl    $0x10,%edx
  shl    $0x18,%esi
  or     %esi,%edx
  or     0xf0(%rax),%edx
  mov    0xf4(%rax),%eax
  shl    $0x8,%eax
  or     %edx,%eax
  mov    %eax,0x3c(%rdi)
  ret
```

assistant: ```c
void copy64(uint32_t *M, uint8_t *in) {
  int32_t i;
  for (i = 0; i < 16; i++)
    M[i] = (in[i * 4 + 3] << 24) | (in[i * 4 + 2] << 16) | (in[i * 4 + 1] << 8) | (in[i * 4 + 0] << 0);
}
```