user: Converte this assembly snippet into its equivalent C code:

```asm
<copy_bytes_up>:
  endbr64
  mov    %rdi,%rax
  mov    %rsi,%rcx
  or     %rsi,%rax
  movslq %edx,%rsi
  and    $0x3,%eax
  je     L229
L6:
  lea    (%rcx,%rsi,1),%r9
  cmp    %r9,%rcx
  je     L231
  lea    0x1(%rcx),%r8
  mov    %rdi,%rdx
  lea    -0x1(%rsi),%rax
  sub    %r8,%rdx
  cmp    $0xe,%rdx
  jbe    L168
  cmp    $0x6,%rax
  jbe    L168
  cmp    $0xe,%rax
  jbe    L24
  mov    %rsi,%rdx
  xor    %eax,%eax
  and    $0xfffffffffffffff0,%rdx
  nopl   0x0(%rax,%rax,1)
L13:
  movdqu (%rcx,%rax,1),%xmm0
  movups %xmm0,(%rdi,%rax,1)
  add    $0x10,%rax
  cmp    %rdx,%rax
  jne    L13
  mov    %rsi,%r8
  and    $0xfffffffffffffff0,%r8
  lea    (%rdi,%r8,1),%rdx
  lea    (%rcx,%r8,1),%rax
  cmp    %r8,%rsi
  je     L231
  sub    %r8,%rsi
  lea    -0x1(%rsi),%r10
  cmp    $0x6,%r10
  jbe    L221
L76:
  mov    (%rcx,%r8,1),%rcx
  mov    %rcx,(%rdi,%r8,1)
  mov    %rsi,%rcx
  and    $0xfffffffffffffff8,%rcx
  add    %rcx,%rdx
  add    %rcx,%rax
  cmp    %rcx,%rsi
  je     L231
L221:
  movzbl (%rax),%ecx
  mov    %cl,(%rdx)
  lea    0x1(%rax),%rcx
  cmp    %rcx,%r9
  je     L231
  movzbl 0x1(%rax),%ecx
  mov    %cl,0x1(%rdx)
  lea    0x2(%rax),%rcx
  cmp    %rcx,%r9
  je     L231
  movzbl 0x2(%rax),%ecx
  mov    %cl,0x2(%rdx)
  lea    0x3(%rax),%rcx
  cmp    %rcx,%r9
  je     L231
  movzbl 0x3(%rax),%ecx
  mov    %cl,0x3(%rdx)
  lea    0x4(%rax),%rcx
  cmp    %rcx,%r9
  je     L231
  movzbl 0x4(%rax),%ecx
  mov    %cl,0x4(%rdx)
  lea    0x5(%rax),%rcx
  cmp    %rcx,%r9
  je     L231
  movzbl 0x5(%rax),%ecx
  mov    %cl,0x5(%rdx)
  lea    0x6(%rax),%rcx
  cmp    %rcx,%r9
  je     L231
  movzbl 0x6(%rax),%eax
  mov    %al,0x6(%rdx)
  ret
  nopl   0x0(%rax,%rax,1)
L168:
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L146:
  movzbl (%rcx,%rax,1),%edx
  mov    %dl,(%rdi,%rax,1)
  add    $0x1,%rax
  cmp    %rax,%rsi
  jne    L146
L231:
  ret
  nopl   0x0(%rax)
L229:
  and    $0x3,%edx
  jne    L6
  and    $0xfffffffffffffffc,%rsi
  lea    (%rcx,%rsi,1),%r8
  cmp    %r8,%rcx
  je     L231
  lea    0x4(%rcx),%r10
  mov    %rdi,%r9
  lea    -0x4(%rsi),%rdx
  sub    %r10,%r9
  cmp    $0x8,%r9
  jbe    L137
  cmp    $0x8,%rdx
  jbe    L137
  shr    $0x2,%rdx
  add    $0x1,%rdx
  mov    %rdx,%rsi
  shr    $0x2,%rsi
  shl    $0x4,%rsi
  nopl   0x0(%rax,%rax,1)
L238:
  movdqu (%rcx,%rax,1),%xmm1
  movups %xmm1,(%rdi,%rax,1)
  add    $0x10,%rax
  cmp    %rsi,%rax
  jne    L238
  mov    %rdx,%rsi
  and    $0xfffffffffffffffc,%rsi
  lea    0x0(,%rsi,4),%rax
  add    %rax,%rdi
  add    %rcx,%rax
  cmp    %rsi,%rdx
  je     L231
  mov    (%rax),%edx
  mov    %edx,(%rdi)
  lea    0x4(%rax),%rdx
  cmp    %rdx,%r8
  je     L231
  mov    0x4(%rax),%edx
  mov    %edx,0x4(%rdi)
  lea    0x8(%rax),%rdx
  cmp    %rdx,%r8
  je     L231
  mov    0x8(%rax),%eax
  mov    %eax,0x8(%rdi)
  ret
  nop
L137:
  mov    (%rcx,%rax,1),%edx
  mov    %edx,(%rdi,%rax,1)
  add    $0x4,%rax
  cmp    %rax,%rsi
  jne    L137
  ret
L24:
  mov    %rcx,%rax
  mov    %rdi,%rdx
  xor    %r8d,%r8d
  jmp    L76
```

assistant: ```c
void copy_bytes_up(to_cp, from_cp, nr_bytes) register char *to_cp, *from_cp;
register int nr_bytes;
{
  if ((int)to_cp % sizeof(int) == 0 && (int)from_cp % sizeof(int) == 0 && nr_bytes % sizeof(int) == 0) {
    register int *to_ip, *from_ip, *end_ip;
    to_ip = (int *)to_cp;
    from_ip = (int *)from_cp;
    end_ip = from_ip + nr_bytes / sizeof(int);
    while (from_ip != end_ip)
      *to_ip++ = *from_ip++;
  } else {
    register char *end_cp;
    end_cp = from_cp + nr_bytes;
    while (from_cp != end_cp)
      *to_cp++ = *from_cp++;
  }
}
```