user: What would the C source look like for the assembly code provided here:

```asm
<q_copy>:
  endbr64
  mov    %rdx,%rax
  mov    %ecx,%edx
  mov    %esi,%ecx
  and    $0x7,%esi
  sar    $0x3,%ecx
  movslq %ecx,%rcx
  add    %rcx,%rdi
  lea    (%rsi,%rdx,1),%ecx
  cmp    $0x8,%ecx
  jg     L69
  mov    %edx,%ecx
  mov    $0x1,%r8d
  shl    %cl,%r8d
  mov    %esi,%ecx
  lea    -0x1(%r8),%edx
  shl    %cl,%edx
  and    (%rdi),%dl
  or     %dl,(%rax)
  ret
  nopw   0x0(%rax,%rax,1)
L69:
  push   %rbp
  push   %rbx
  test   %esi,%esi
  je     L32
  mov    $0xff,%r8d
  mov    %esi,%ecx
  lea    -0x8(%rsi,%rdx,1),%edx
  add    $0x1,%rdi
  shl    %cl,%r8d
  and    -0x1(%rdi),%r8b
  or     %r8b,(%rax)
  add    $0x1,%rax
L32:
  cmp    $0x7,%edx
  jle    L172
  lea    0x1(%rdi),%rsi
  mov    %rax,%rcx
  lea    -0x8(%rdx),%r9d
  sub    %rsi,%rcx
  cmp    $0xe,%rcx
  jbe    L10
  cmp    $0x37,%r9d
  jbe    L10
  mov    %r9d,%r11d
  shr    $0x3,%r11d
  lea    0x1(%r11),%r8d
  cmp    $0x77,%r9d
  jbe    L198
  mov    %r8d,%esi
  xor    %ecx,%ecx
  shr    $0x4,%esi
  shl    $0x4,%rsi
L37:
  movdqu (%rdi,%rcx,1),%xmm0
  movups %xmm0,(%rax,%rcx,1)
  add    $0x10,%rcx
  cmp    %rsi,%rcx
  jne    L37
  mov    %r8d,%ebx
  and    $0xfffffff0,%ebx
  mov    %ebx,%ebp
  mov    %ebx,%r10d
  neg    %ebp
  lea    (%rdi,%r10,1),%rcx
  lea    (%rax,%r10,1),%rsi
  lea    (%rdx,%rbp,8),%edx
  cmp    %ebx,%r8d
  je     L108
  sub    %ebx,%r11d
  lea    0x1(%r11),%r8d
  cmp    $0x6,%r11d
  jbe    L156
L53:
  mov    (%rdi,%r10,1),%r11
  mov    %r11,(%rax,%r10,1)
  mov    %r8d,%r10d
  and    $0xfffffff8,%r10d
  mov    %r10d,%r11d
  add    %r11,%rcx
  add    %r11,%rsi
  mov    %r10d,%r11d
  neg    %r11d
  lea    (%rdx,%r11,8),%edx
  cmp    %r10d,%r8d
  je     L108
L156:
  movzbl (%rcx),%r8d
  mov    %r8b,(%rsi)
  lea    -0x8(%rdx),%r8d
  cmp    $0x7,%r8d
  jle    L108
  movzbl 0x1(%rcx),%r8d
  mov    %r8b,0x1(%rsi)
  lea    -0x10(%rdx),%r8d
  cmp    $0x7,%r8d
  jle    L108
  movzbl 0x2(%rcx),%r8d
  mov    %r8b,0x2(%rsi)
  lea    -0x18(%rdx),%r8d
  cmp    $0x7,%r8d
  jle    L108
  movzbl 0x3(%rcx),%r8d
  mov    %r8b,0x3(%rsi)
  lea    -0x20(%rdx),%r8d
  cmp    $0x7,%r8d
  jle    L108
  movzbl 0x4(%rcx),%r8d
  mov    %r8b,0x4(%rsi)
  lea    -0x28(%rdx),%r8d
  cmp    $0x7,%r8d
  jle    L108
  movzbl 0x5(%rcx),%r8d
  mov    %r8b,0x5(%rsi)
  cmp    $0x37,%edx
  jle    L108
  movzbl 0x6(%rcx),%edx
  mov    %dl,0x6(%rsi)
L108:
  mov    %r9d,%edx
  shr    $0x3,%edx
  lea    0x1(%rdx),%ecx
  neg    %edx
  add    %rcx,%rdi
  add    %rcx,%rax
  lea    (%r9,%rdx,8),%edx
L172:
  test   %edx,%edx
  jle    L54
  mov    $0x1,%esi
  mov    %edx,%ecx
  shl    %cl,%esi
  sub    $0x1,%esi
  and    (%rdi),%sil
  or     %sil,(%rax)
L54:
  pop    %rbx
  pop    %rbp
  ret
  nopw   0x0(%rax,%rax,1)
L10:
  mov    %r9d,%esi
  xor    %edx,%edx
  shr    $0x3,%esi
  add    $0x1,%esi
  nopl   0x0(%rax,%rax,1)
L2:
  movzbl (%rdi,%rdx,1),%ecx
  mov    %cl,(%rax,%rdx,1)
  add    $0x1,%rdx
  cmp    %rsi,%rdx
  jne    L2
  jmp    L108
L198:
  mov    %rax,%rsi
  mov    %rdi,%rcx
  xor    %r10d,%r10d
  jmp    L53
```

assistant: ```c
void q_copy(unsigned char *src, int pos, unsigned char *dst, int size) {
  src += pos >> 3;
  pos &= 7;
  if (pos + size <= 8)
    *dst |= *src & (((1 << size) - 1) << pos);
  else {
    if (pos) {
      *dst++ |= *src++ & (0xff << pos);
      size -= 8 - pos;
    }
    while (size >= 8) {
      *dst++ = *src++;
      size -= 8;
    }
    if (size > 0)
      *dst |= *src & ((1 << size) - 1);
  }
}
```