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

```asm
<_left_right_solid_src_dest_mask>:
  endbr64
  cmp    %rsi,%rdi
  jae    L19
  push   %rbx
  lea    0x1(%rdi),%r9
  mov    %rdx,%rbx
  mov    %rsi,%r10
  sub    %r9,%rbx
  sub    %rdi,%rsi
  not    %r8d
  mov    %ecx,%r11d
  lea    -0x1(%rsi),%rax
  cmp    $0xe,%rbx
  jbe    L160
  cmp    $0x6,%rax
  jbe    L160
  cmp    $0xe,%rax
  jbe    L144
  movd   %r8d,%xmm3
  movd   %ecx,%xmm2
  mov    %rsi,%r9
  xor    %eax,%eax
  punpcklbw %xmm3,%xmm3
  punpcklbw %xmm2,%xmm2
  and    $0xfffffffffffffff0,%r9
  punpcklwd %xmm3,%xmm3
  punpcklwd %xmm2,%xmm2
  pshufd $0x0,%xmm3,%xmm3
  pshufd $0x0,%xmm2,%xmm2
  nopw   0x0(%rax,%rax,1)
L46:
  movdqu (%rdx,%rax,1),%xmm0
  movdqu (%rdi,%rax,1),%xmm1
  pand   %xmm3,%xmm0
  pand   %xmm2,%xmm1
  por    %xmm1,%xmm0
  movups %xmm0,(%rdx,%rax,1)
  add    $0x10,%rax
  cmp    %r9,%rax
  jne    L46
  mov    %rsi,%r11
  and    $0xfffffffffffffff0,%r11
  add    %r11,%rdx
  lea    (%rdi,%r11,1),%r9
  mov    %rdx,%rax
  cmp    %r11,%rsi
  je     L90
  sub    %r11,%rsi
  lea    -0x1(%rsi),%rbx
  cmp    $0x6,%rbx
  jbe    L66
L102:
  movq   (%rdi,%r11,1),%xmm0
  mov    %ecx,%edi
  movzbl %cl,%r11d
  movq   (%rdx),%xmm2
  shl    $0x8,%edi
  or     %r11d,%edi
  movzbl %r8b,%r11d
  movd   %edi,%xmm4
  mov    %r8d,%edi
  shl    $0x8,%edi
  pshuflw $0x0,%xmm4,%xmm1
  or     %r11d,%edi
  pand   %xmm1,%xmm0
  movd   %edi,%xmm5
  pshuflw $0x0,%xmm5,%xmm1
  pand   %xmm2,%xmm1
  por    %xmm1,%xmm0
  movq   %xmm0,(%rdx)
  mov    %rsi,%rdx
  and    $0xfffffffffffffff8,%rdx
  add    %rdx,%r9
  add    %rdx,%rax
  cmp    %rdx,%rsi
  je     L90
L66:
  movzbl (%rax),%edx
  movzbl (%r9),%esi
  and    %r8d,%edx
  and    %ecx,%esi
  or     %esi,%edx
  mov    %dl,(%rax)
  lea    0x1(%r9),%rdx
  cmp    %rdx,%r10
  jbe    L90
  movzbl 0x1(%rax),%edx
  movzbl 0x1(%r9),%esi
  and    %r8d,%edx
  and    %ecx,%esi
  or     %esi,%edx
  mov    %dl,0x1(%rax)
  lea    0x2(%r9),%rdx
  cmp    %rdx,%r10
  jbe    L90
  movzbl 0x2(%rax),%edx
  movzbl 0x2(%r9),%esi
  and    %r8d,%edx
  and    %ecx,%esi
  or     %esi,%edx
  mov    %dl,0x2(%rax)
  lea    0x3(%r9),%rdx
  cmp    %rdx,%r10
  jbe    L90
  movzbl 0x3(%rax),%edx
  movzbl 0x3(%r9),%esi
  and    %r8d,%edx
  and    %ecx,%esi
  or     %esi,%edx
  mov    %dl,0x3(%rax)
  lea    0x4(%r9),%rdx
  cmp    %rdx,%r10
  jbe    L90
  movzbl 0x4(%rax),%edx
  movzbl 0x4(%r9),%esi
  and    %r8d,%edx
  and    %ecx,%esi
  or     %esi,%edx
  mov    %dl,0x4(%rax)
  lea    0x5(%r9),%rdx
  cmp    %rdx,%r10
  jbe    L90
  movzbl 0x5(%rax),%edx
  movzbl 0x5(%r9),%esi
  and    %r8d,%edx
  and    %ecx,%esi
  or     %esi,%edx
  mov    %dl,0x5(%rax)
  lea    0x6(%r9),%rdx
  cmp    %rdx,%r10
  jbe    L90
  and    0x6(%rax),%r8b
  and    0x6(%r9),%cl
  or     %ecx,%r8d
  mov    %r8b,0x6(%rax)
L90:
  pop    %rbx
  ret
  nopw   0x0(%rax,%rax,1)
L160:
  add    %rdx,%rsi
  jmp    L42
  nopl   (%rax)
L24:
  add    $0x1,%r9
L42:
  movzbl (%rdi),%eax
  movzbl (%rdx),%ecx
  add    $0x1,%rdx
  mov    %r9,%rdi
  and    %r11d,%eax
  and    %r8d,%ecx
  or     %ecx,%eax
  mov    %al,-0x1(%rdx)
  cmp    %rsi,%rdx
  jne    L24
  pop    %rbx
  ret
  nopl   0x0(%rax,%rax,1)
L19:
  ret
L144:
  mov    %rdx,%rax
  mov    %rdi,%r9
  xor    %r11d,%r11d
  jmp    L102
```

assistant: ```c
void _left_right_solid_src_dest_mask(unsigned char *source_row_start, unsigned char *source_row_end, unsigned char *destination_row_start, int srcMask, int destMask) {
  unsigned char *source_row_ptr;
  unsigned char *destination_row_ptr = destination_row_start;
  for (source_row_ptr = source_row_start; source_row_ptr < source_row_end; source_row_ptr++) {
    *destination_row_ptr = (*destination_row_ptr & ~destMask) | (srcMask & *source_row_ptr);
    destination_row_ptr++;
  }
}
```