user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<pixel_convert_8u_yuv420p_to_8u_rgba>:
  endbr64
  mov    %ecx,%eax
  mov    %r9d,%ecx
  push   %r15
  imul   %eax,%ecx
  push   %r14
  mov    %edx,%r14d
  push   %r13
  push   %r12
  push   %rbp
  test   %ecx,%ecx
  push   %rbx
  mov    %edx,-0x1c(%rsp)
  movslq %ecx,%rdx
  lea    (%r8,%rdx,4),%rdx
  mov    %r9d,-0x18(%rsp)
  mov    %rdx,-0x8(%rsp)
  lea    0x3(%rcx),%edx
  cmovns %ecx,%edx
  sar    $0x2,%edx
  movslq %edx,%rcx
  mov    %eax,%edx
  shr    $0x1f,%edx
  mov    %rcx,-0x28(%rsp)
  add    %eax,%edx
  sar    %edx
  mov    %edx,-0x14(%rsp)
  cmp    $0x1,%eax
  jle    L30
  lea    (%rsi,%rsi,1),%eax
  movslq %esi,%rsi
  mov    %r14d,%r13d
  mov    %rdi,-0x30(%rsp)
  cltq
  shr    $0x1f,%r13d
  movl   $0x0,-0x20(%rsp)
  shl    $0x2,%rax
  add    %r14d,%r13d
  xor    %r14d,%r14d
  mov    %rax,-0x10(%rsp)
  lea    (%rdi,%rsi,4),%rax
  sar    %r13d
  mov    %rax,-0x38(%rsp)
  movslq %r9d,%rax
  shl    $0x2,%rax
  mov    %rax,-0x40(%rsp)
  nopw   0x0(%rax,%rax,1)
L0:
  mov    -0x40(%rsp),%rax
  lea    (%rax,%r8,1),%rbx
  mov    %r14d,%eax
  shr    $0x1f,%eax
  add    %r14d,%eax
  sar    %eax
  cltq
  lea    0x0(,%rax,4),%rsi
  add    -0x28(%rsp),%rax
  shl    $0x2,%rax
  cmpl   $0x1,-0x1c(%rsp)
  jle    L22
  mov    -0x8(%rsp),%rdi
  mov    -0x38(%rsp),%rcx
  xor    %r9d,%r9d
  mov    -0x30(%rsp),%rdx
  lea    (%rdi,%rsi,1),%r12
  lea    (%rdi,%rax,1),%rbp
  nopl   0x0(%rax)
L27:
  mov    (%r12,%r9,4),%eax
  mov    0x0(%rbp,%r9,4),%edi
  mov    $0xff,%r15d
  add    $0xffffff80,%edi
  lea    -0x80(%rax),%r10d
  imul   $0x1c6,%r10d,%eax
  imul   $0x167,%edi,%esi
  imul   $0x58,%r10d,%r10d
  imul   $0xb7,%edi,%edi
  sar    $0x8,%eax
  sar    $0x8,%esi
  add    %r10d,%edi
  mov    (%r8,%r9,8),%r10d
  movl   $0x1,0xc(%rdx)
  sar    $0x8,%edi
  lea    (%rsi,%r10,1),%r11d
  cmp    %r15d,%r11d
  cmovg  %r15d,%r11d
  xor    %r15d,%r15d
  test   %r11d,%r11d
  cmovs  %r15d,%r11d
  mov    $0xff,%r15d
  mov    %r11d,(%rdx)
  mov    %r10d,%r11d
  sub    %edi,%r11d
  cmp    %r15d,%r11d
  cmovg  %r15d,%r11d
  xor    %r15d,%r15d
  test   %r11d,%r11d
  cmovs  %r15d,%r11d
  add    %eax,%r10d
  mov    $0xff,%r15d
  mov    %r11d,0x4(%rdx)
  mov    $0xff,%r11d
  cmp    %r11d,%r10d
  cmovg  %r11d,%r10d
  xor    %r11d,%r11d
  test   %r10d,%r10d
  cmovs  %r11d,%r10d
  mov    %r10d,0x8(%rdx)
  mov    0x4(%r8,%r9,8),%r10d
  movl   $0x1,0x1c(%rdx)
  lea    (%rsi,%r10,1),%r11d
  cmp    %r15d,%r11d
  cmovg  %r15d,%r11d
  xor    %r15d,%r15d
  test   %r11d,%r11d
  cmovs  %r15d,%r11d
  mov    $0xff,%r15d
  mov    %r11d,0x10(%rdx)
  mov    %r10d,%r11d
  sub    %edi,%r11d
  cmp    %r15d,%r11d
  cmovg  %r15d,%r11d
  xor    %r15d,%r15d
  test   %r11d,%r11d
  cmovs  %r15d,%r11d
  add    %eax,%r10d
  mov    $0xff,%r15d
  mov    %r11d,0x14(%rdx)
  mov    $0xff,%r11d
  cmp    %r11d,%r10d
  cmovg  %r11d,%r10d
  xor    %r11d,%r11d
  test   %r10d,%r10d
  cmovs  %r11d,%r10d
  mov    %r10d,0x18(%rdx)
  mov    (%rbx,%r9,8),%r10d
  movl   $0x1,0xc(%rcx)
  lea    (%rsi,%r10,1),%r11d
  cmp    %r15d,%r11d
  cmovg  %r15d,%r11d
  xor    %r15d,%r15d
  test   %r11d,%r11d
  cmovs  %r15d,%r11d
  mov    $0xff,%r15d
  mov    %r11d,(%rcx)
  mov    %r10d,%r11d
  sub    %edi,%r11d
  cmp    %r15d,%r11d
  cmovg  %r15d,%r11d
  xor    %r15d,%r15d
  test   %r11d,%r11d
  cmovs  %r15d,%r11d
  add    %eax,%r10d
  mov    %r11d,0x4(%rcx)
  mov    $0xff,%r11d
  cmp    %r11d,%r10d
  cmovg  %r11d,%r10d
  xor    %r11d,%r11d
  test   %r10d,%r10d
  cmovs  %r11d,%r10d
  mov    $0xff,%r11d
  mov    %r10d,0x8(%rcx)
  mov    0x4(%rbx,%r9,8),%r10d
  movl   $0x1,0x1c(%rcx)
  add    %r10d,%esi
  cmp    %r11d,%esi
  cmovg  %r11d,%esi
  xor    %r11d,%r11d
  test   %esi,%esi
  cmovs  %r11d,%esi
  mov    %esi,0x10(%rcx)
  mov    %r10d,%esi
  sub    %edi,%esi
  mov    $0xff,%edi
  cmp    %edi,%esi
  cmovg  %edi,%esi
  xor    %edi,%edi
  test   %esi,%esi
  cmovs  %edi,%esi
  add    %r10d,%eax
  mov    %esi,0x14(%rcx)
  mov    $0xff,%esi
  cmp    %esi,%eax
  cmovg  %esi,%eax
  xor    %esi,%esi
  test   %eax,%eax
  cmovs  %esi,%eax
  add    $0x1,%r9
  add    $0x20,%rdx
  add    $0x20,%rcx
  mov    %eax,-0x8(%rcx)
  cmp    %r9d,%r13d
  jg     L27
L22:
  mov    -0x10(%rsp),%rdx
  add    %rdx,-0x30(%rsp)
  add    %rdx,-0x38(%rsp)
  mov    -0x40(%rsp),%rdx
  addl   $0x1,-0x20(%rsp)
  add    -0x18(%rsp),%r14d
  mov    -0x20(%rsp),%eax
  lea    (%rbx,%rdx,1),%r8
  cmp    -0x14(%rsp),%eax
  jl     L0
L30:
  pop    %rbx
  xor    %eax,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

assistant: ```c
int pixel_convert_8u_yuv420p_to_8u_rgba(uint8_t *dest, int dstride, int dwidth, int dheight, const uint8_t *src, int sstride) {
  const uint8_t *uplane = src + dheight * sstride;
  const uint8_t *vplane = uplane + dheight * sstride / 4;
  for (int i = 0; i < dheight / 2; i++) {
    const uint8_t *yrow1 = src + i * 2 * sstride;
    const uint8_t *yrow2 = src + i * 2 * sstride + sstride;
    const uint8_t *urow = uplane + i * sstride / 2;
    const uint8_t *vrow = vplane + i * sstride / 2;
    uint8_t *rgb1 = dest + i * 2 * dstride;
    uint8_t *rgb2 = dest + i * 2 * dstride + dstride;
    for (int j = 0; j < dwidth / 2; j++) {
      int cb = ((urow[j] - 128) * 454) >> 8;
      int cr = ((vrow[j] - 128) * 359) >> 8;
      int cg = ((vrow[j] - 128) * 183 + (urow[j] - 128) * 88) >> 8;
      int r, g, b, yp;
      yp = yrow1[j * 2];
      r = yp + cr;
      b = yp + cb;
      g = yp - cg;
      rgb1[j * 8 + 0] = ((0) > (((255) < (r) ? (255) : (r))) ? (0) : (((255) < (r) ? (255) : (r))));
      rgb1[j * 8 + 1] = ((0) > (((255) < (g) ? (255) : (g))) ? (0) : (((255) < (g) ? (255) : (g))));
      rgb1[j * 8 + 2] = ((0) > (((255) < (b) ? (255) : (b))) ? (0) : (((255) < (b) ? (255) : (b))));
      rgb1[j * 8 + 3] = 1;
      yp = yrow1[j * 2 + 1];
      r = yp + cr;
      b = yp + cb;
      g = yp - cg;
      rgb1[j * 8 + 4] = ((0) > (((255) < (r) ? (255) : (r))) ? (0) : (((255) < (r) ? (255) : (r))));
      rgb1[j * 8 + 5] = ((0) > (((255) < (g) ? (255) : (g))) ? (0) : (((255) < (g) ? (255) : (g))));
      rgb1[j * 8 + 6] = ((0) > (((255) < (b) ? (255) : (b))) ? (0) : (((255) < (b) ? (255) : (b))));
      rgb1[j * 8 + 7] = 1;
      yp = yrow2[j * 2];
      r = yp + cr;
      b = yp + cb;
      g = yp - cg;
      rgb2[j * 8 + 0] = ((0) > (((255) < (r) ? (255) : (r))) ? (0) : (((255) < (r) ? (255) : (r))));
      rgb2[j * 8 + 1] = ((0) > (((255) < (g) ? (255) : (g))) ? (0) : (((255) < (g) ? (255) : (g))));
      rgb2[j * 8 + 2] = ((0) > (((255) < (b) ? (255) : (b))) ? (0) : (((255) < (b) ? (255) : (b))));
      rgb2[j * 8 + 3] = 1;
      yp = yrow2[j * 2 + 1];
      r = yp + cr;
      b = yp + cb;
      g = yp - cg;
      rgb2[j * 8 + 4] = ((0) > (((255) < (r) ? (255) : (r))) ? (0) : (((255) < (r) ? (255) : (r))));
      rgb2[j * 8 + 5] = ((0) > (((255) < (g) ? (255) : (g))) ? (0) : (((255) < (g) ? (255) : (g))));
      rgb2[j * 8 + 6] = ((0) > (((255) < (b) ? (255) : (b))) ? (0) : (((255) < (b) ? (255) : (b))));
      rgb2[j * 8 + 7] = 1;
    }
  }
  return 0;
}
```