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

```asm
<uyvy2rgb>:
  endbr64
  add    %edx,%edx
  test   %edx,%edx
  jle    L16
  push   %r15
  sub    $0x1,%edx
  push   %r14
  shr    $0x2,%edx
  push   %r13
  push   %r12
  push   %rbp
  lea    0x4(%rdi,%rdx,4),%rbp
  push   %rbx
  nopl   0x0(%rax,%rax,1)
L17:
  movzbl 0x2(%rdi),%r12d
  movzbl (%rdi),%eax
  movzbl 0x1(%rdi),%r8d
  movzbl 0x3(%rdi),%r10d
  add    $0xffffff80,%r12d
  add    $0xffffff80,%eax
  lea    (%r12,%r12,4),%edx
  mov    %r12d,%ecx
  lea    (%rax,%rax,1),%r11d
  mov    %r12d,%r14d
  shl    $0x7,%ecx
  shl    $0x8,%edx
  lea    (%r11,%rax,1),%r9d
  mov    %eax,%r15d
  shl    $0x4,%r14d
  add    %ecx,%edx
  shl    $0x7,%r9d
  lea    (%r12,%r12,1),%r13d
  lea    0x0(,%r12,8),%ecx
  add    %r14d,%edx
  shl    $0x4,%r15d
  add    %ecx,%edx
  add    %r15d,%r9d
  add    %r12d,%ecx
  lea    (%r9,%rax,4),%r9d
  shl    $0x6,%ecx
  add    %r13d,%edx
  imul   $0x820,%eax,%eax
  add    %r14d,%ecx
  add    %r11d,%r9d
  sar    $0xb,%edx
  add    %r13d,%ecx
  sar    $0xb,%r9d
  lea    (%rdx,%r8,1),%ebx
  add    %r12d,%ecx
  mov    %r8d,%r12d
  sub    %r11d,%eax
  sar    $0xb,%ecx
  sub    %r9d,%r12d
  xor    %r11d,%r11d
  sar    $0xb,%eax
  sub    %ecx,%r12d
  add    %eax,%r8d
  test   %ebx,%ebx
  cmovs  %r11d,%ebx
  test   %r12d,%r12d
  cmovns %r12d,%r11d
  xor    %r12d,%r12d
  test   %r8d,%r8d
  cmovs  %r12d,%r8d
  mov    $0xff,%r12d
  cmp    %r12d,%ebx
  cmovg  %r12d,%ebx
  mov    %bl,(%rsi)
  mov    $0xff,%ebx
  cmp    %ebx,%r11d
  cmovg  %ebx,%r11d
  mov    %r11b,0x1(%rsi)
  mov    $0xff,%r11d
  cmp    %r11d,%r8d
  cmovg  %r11d,%r8d
  add    %r10d,%edx
  add    %r10d,%eax
  mov    %r8b,0x2(%rsi)
  mov    %r10d,%r8d
  sub    %r9d,%r8d
  sub    %ecx,%r8d
  xor    %ecx,%ecx
  test   %edx,%edx
  cmovs  %ecx,%edx
  test   %r8d,%r8d
  cmovns %r8d,%ecx
  xor    %r8d,%r8d
  test   %eax,%eax
  cmovs  %r8d,%eax
  mov    $0xff,%r8d
  cmp    %r8d,%edx
  cmovg  %r8d,%edx
  mov    %dl,0x3(%rsi)
  mov    $0xff,%edx
  cmp    %edx,%ecx
  cmovg  %edx,%ecx
  cmp    %edx,%eax
  cmovg  %edx,%eax
  add    $0x4,%rdi
  add    $0x6,%rsi
  mov    %cl,-0x2(%rsi)
  mov    %al,-0x1(%rsi)
  cmp    %rdi,%rbp
  jne    L17
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  xchg   %ax,%ax
L16:
  ret
```

assistant: ```c
void uyvy2rgb(char *YUV, char *RGB, int NumPixels) {
  int i, j;
  register int y0, y1, u, v;
  register int r, g, b;
  for (i = 0, j = 0; i < (NumPixels << 1); i += 4, j += 6) {
    u = (unsigned char)YUV[i + 0] - 128;
    y0 = (unsigned char)YUV[i + 1];
    v = (unsigned char)YUV[i + 2] - 128;
    y1 = (unsigned char)YUV[i + 3];
    r = y0 + (((v << 10) + (v << 8) + (v << 7) + (v << 4) + (v << 3) + (v << 1)) >> 11);
    g = y0 - (((u << 8) + (u << 7) + (u << 4) + (u << 2) + (u << 1)) >> 11) - (((v << 9) + (v << 6) + (v << 4) + (v << 1) + v) >> 11);
    b = y0 + (((u << 11) + (u << 5) - (u << 1)) >> 11);
    r = r < 0 ? 0 : r;
    g = g < 0 ? 0 : g;
    b = b < 0 ? 0 : b;
    r = r > 255 ? 255 : r;
    g = g > 255 ? 255 : g;
    b = b > 255 ? 255 : b;
    RGB[j + 0] = r;
    RGB[j + 1] = g;
    RGB[j + 2] = b;
    r = y1 + (((v << 10) + (v << 8) + (v << 7) + (v << 4) + (v << 3) + (v << 1)) >> 11);
    g = y1 - (((u << 8) + (u << 7) + (u << 4) + (u << 2) + (u << 1)) >> 11) - (((v << 9) + (v << 6) + (v << 4) + (v << 1) + v) >> 11);
    b = y1 + (((u << 11) + (u << 5) - (u << 1)) >> 11);
    r = r < 0 ? 0 : r;
    g = g < 0 ? 0 : g;
    b = b < 0 ? 0 : b;
    r = r > 255 ? 255 : r;
    g = g > 255 ? 255 : g;
    b = b > 255 ? 255 : b;
    RGB[j + 3] = r;
    RGB[j + 4] = g;
    RGB[j + 5] = b;
  }
}
```