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

```asm
<uyvy2rgb>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbx
  mov    %rdi,-0x40(%rbp)
  mov    %rsi,-0x48(%rbp)
  mov    %edx,-0x4c(%rbp)
  movl   $0x0,-0x30(%rbp)
  movl   $0x0,-0x2c(%rbp)
  jmp    L13
L17:
  mov    -0x30(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  lea    -0x80(%rax),%r12d
  mov    -0x30(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%r13d
  mov    -0x30(%rbp),%eax
  cltq
  lea    0x2(%rax),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  lea    -0x80(%rax),%ebx
  mov    -0x30(%rbp),%eax
  cltq
  lea    0x3(%rax),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%esi
  mov    %ebx,%edx
  shl    $0xa,%edx
  mov    %ebx,%eax
  shl    $0x8,%eax
  add    %eax,%edx
  mov    %ebx,%eax
  shl    $0x7,%eax
  add    %eax,%edx
  mov    %ebx,%eax
  shl    $0x4,%eax
  add    %eax,%edx
  lea    0x0(,%rbx,8),%eax
  add    %eax,%edx
  lea    (%rbx,%rbx,1),%eax
  add    %edx,%eax
  sar    $0xb,%eax
  lea    0x0(%r13,%rax,1),%r15d
  mov    %r12d,%edx
  shl    $0x8,%edx
  mov    %r12d,%eax
  shl    $0x7,%eax
  add    %eax,%edx
  mov    %r12d,%eax
  shl    $0x4,%eax
  add    %eax,%edx
  lea    0x0(,%r12,4),%eax
  add    %eax,%edx
  lea    (%r12,%r12,1),%eax
  add    %edx,%eax
  sar    $0xb,%eax
  mov    %eax,%edx
  mov    %r13d,%eax
  sub    %edx,%eax
  mov    %ebx,%ecx
  shl    $0x9,%ecx
  mov    %ebx,%edx
  shl    $0x6,%edx
  add    %edx,%ecx
  mov    %ebx,%edx
  shl    $0x4,%edx
  add    %edx,%ecx
  lea    (%rbx,%rbx,1),%edx
  add    %ecx,%edx
  add    %ebx,%edx
  sar    $0xb,%edx
  sub    %edx,%eax
  mov    %eax,%r14d
  mov    %r12d,%edx
  shl    $0xb,%edx
  mov    %r12d,%eax
  shl    $0x5,%eax
  add    %edx,%eax
  lea    (%r12,%r12,1),%edx
  sub    %edx,%eax
  sar    $0xb,%eax
  add    %eax,%r13d
  mov    $0x0,%eax
  test   %r15d,%r15d
  cmovs  %eax,%r15d
  mov    $0x0,%eax
  test   %r14d,%r14d
  cmovs  %eax,%r14d
  mov    $0x0,%eax
  test   %r13d,%r13d
  cmovs  %eax,%r13d
  mov    $0xff,%eax
  cmp    %eax,%r15d
  cmovg  %eax,%r15d
  mov    $0xff,%eax
  cmp    %eax,%r14d
  cmovg  %eax,%r14d
  mov    $0xff,%eax
  cmp    %eax,%r13d
  cmovg  %eax,%r13d
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    %r15d,%edx
  mov    %dl,(%rax)
  mov    -0x2c(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    %r14d,%edx
  mov    %dl,(%rax)
  mov    -0x2c(%rbp),%eax
  cltq
  lea    0x2(%rax),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    %r13d,%edx
  mov    %dl,(%rax)
  mov    %ebx,%edx
  shl    $0xa,%edx
  mov    %ebx,%eax
  shl    $0x8,%eax
  add    %eax,%edx
  mov    %ebx,%eax
  shl    $0x7,%eax
  add    %eax,%edx
  mov    %ebx,%eax
  shl    $0x4,%eax
  add    %eax,%edx
  lea    0x0(,%rbx,8),%eax
  add    %eax,%edx
  lea    (%rbx,%rbx,1),%eax
  add    %edx,%eax
  sar    $0xb,%eax
  lea    (%rsi,%rax,1),%r15d
  mov    %r12d,%edx
  shl    $0x8,%edx
  mov    %r12d,%eax
  shl    $0x7,%eax
  add    %eax,%edx
  mov    %r12d,%eax
  shl    $0x4,%eax
  add    %eax,%edx
  lea    0x0(,%r12,4),%eax
  add    %eax,%edx
  lea    (%r12,%r12,1),%eax
  add    %edx,%eax
  sar    $0xb,%eax
  mov    %eax,%edx
  mov    %esi,%eax
  sub    %edx,%eax
  mov    %ebx,%ecx
  shl    $0x9,%ecx
  mov    %ebx,%edx
  shl    $0x6,%edx
  add    %edx,%ecx
  mov    %ebx,%edx
  shl    $0x4,%edx
  add    %edx,%ecx
  lea    (%rbx,%rbx,1),%edx
  add    %ecx,%edx
  add    %ebx,%edx
  sar    $0xb,%edx
  sub    %edx,%eax
  mov    %eax,%r14d
  mov    %r12d,%edx
  shl    $0xb,%edx
  mov    %r12d,%eax
  shl    $0x5,%eax
  add    %edx,%eax
  lea    (%r12,%r12,1),%edx
  sub    %edx,%eax
  sar    $0xb,%eax
  lea    (%rsi,%rax,1),%r13d
  mov    $0x0,%eax
  test   %r15d,%r15d
  cmovs  %eax,%r15d
  mov    $0x0,%eax
  test   %r14d,%r14d
  cmovs  %eax,%r14d
  mov    $0x0,%eax
  test   %r13d,%r13d
  cmovs  %eax,%r13d
  mov    $0xff,%eax
  cmp    %eax,%r15d
  cmovg  %eax,%r15d
  mov    $0xff,%eax
  cmp    %eax,%r14d
  cmovg  %eax,%r14d
  mov    $0xff,%eax
  cmp    %eax,%r13d
  cmovg  %eax,%r13d
  mov    -0x2c(%rbp),%eax
  cltq
  lea    0x3(%rax),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    %r15d,%edx
  mov    %dl,(%rax)
  mov    -0x2c(%rbp),%eax
  cltq
  lea    0x4(%rax),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    %r14d,%edx
  mov    %dl,(%rax)
  mov    -0x2c(%rbp),%eax
  cltq
  lea    0x5(%rax),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    %r13d,%edx
  mov    %dl,(%rax)
  addl   $0x4,-0x30(%rbp)
  addl   $0x6,-0x2c(%rbp)
L13:
  mov    -0x4c(%rbp),%eax
  add    %eax,%eax
  cmp    %eax,-0x30(%rbp)
  jl     L17
  nop
  nop
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  pop    %rbp
  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;
  }
}
```