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

```asm
<yuv444pto422>:
  endbr64
  lea    -0x10(%rdx,%rdx,1),%eax
  mov    %rsi,%rcx
  movslq %edx,%rsi
  push   %rbp
  cltq
  push   %rbx
  lea    0x500(%rdi),%r9
  add    %rcx,%rsi
  lea    0x600(%rdi),%r11
  lea    0x10(%rax),%rbx
  xor    %edi,%edi
L15:
  lea    -0x100(%r9),%r10
  lea    -0x500(%r9),%rdx
  xor    %eax,%eax
L36:
  mov    (%rdx,%rax,2),%r8d
  mov    $0xffffffff,%ebp
  cmp    $0xff,%r8d
  jg     L35
  test   %r8d,%r8d
  mov    %r8d,%ebp
  cmovs  %edi,%ebp
L35:
  mov    %bpl,(%rcx,%rax,1)
  mov    (%r10,%rax,2),%ebp
  mov    $0xffffffff,%r8d
  cmp    $0x7f,%ebp
  jg     L73
  lea    -0x80(%rbp),%r8d
  cmp    $0xffffff7f,%ebp
  cmovle %edi,%r8d
L73:
  mov    %r8b,0x1(%rcx,%rax,1)
  mov    0x4(%rdx,%rax,2),%r8d
  mov    $0xffffffff,%ebp
  cmp    $0xff,%r8d
  jg     L22
  test   %r8d,%r8d
  mov    %r8d,%ebp
  cmovs  %edi,%ebp
L22:
  mov    %bpl,0x2(%rcx,%rax,1)
  mov    (%r9,%rax,2),%ebp
  mov    $0xffffffff,%r8d
  cmp    $0x7f,%ebp
  jg     L97
  lea    -0x80(%rbp),%r8d
  cmp    $0xffffff7f,%ebp
  cmovle %edi,%r8d
L97:
  mov    %r8b,0x3(%rcx,%rax,1)
  mov    0x20(%rdx,%rax,2),%r8d
  mov    $0xffffffff,%ebp
  cmp    $0xff,%r8d
  jg     L44
  test   %r8d,%r8d
  mov    %r8d,%ebp
  cmovs  %edi,%ebp
L44:
  mov    %bpl,(%rsi,%rax,1)
  mov    0x20(%r10,%rax,2),%ebp
  mov    $0xffffffff,%r8d
  cmp    $0x7f,%ebp
  jg     L78
  lea    -0x80(%rbp),%r8d
  cmp    $0xffffff7f,%ebp
  cmovle %edi,%r8d
L78:
  mov    %r8b,0x1(%rsi,%rax,1)
  mov    0x24(%rdx,%rax,2),%r8d
  mov    $0xffffffff,%ebp
  cmp    $0xff,%r8d
  jg     L80
  test   %r8d,%r8d
  mov    %r8d,%ebp
  cmovs  %edi,%ebp
L80:
  mov    %bpl,0x2(%rsi,%rax,1)
  mov    0x20(%r9,%rax,2),%ebp
  mov    $0xffffffff,%r8d
  cmp    $0x7f,%ebp
  jg     L18
  lea    -0x80(%rbp),%r8d
  cmp    $0xffffff7f,%ebp
  cmovle %edi,%r8d
L18:
  mov    %r8b,0x3(%rsi,%rax,1)
  add    $0x4,%rax
  cmp    $0x10,%rax
  jne    L36
  add    $0x40,%r9
  add    %rbx,%rcx
  add    %rbx,%rsi
  cmp    %r11,%r9
  jne    L15
  pop    %rbx
  pop    %rbp
  ret
```

assistant: ```c
void yuv444pto422(int *out, unsigned char *pic, int width) {
  int j, k;
  unsigned char *pic0, *pic1;
  int *outy, *outu, *outv;
  int outy1 = 0;
  int outy2 = 8;
  int outu1 = 0;
  int outv1 = 0;
  pic0 = pic;
  pic1 = pic + width;
  outy = out;
  outu = out + 64 * 4;
  outv = out + 64 * 5;
  for (j = 0; j < 4; j++) {
    for (k = 0; k < 4; k++) {
      *pic0++ = (unsigned char)(((outy[outy1]) > 0xFF) ? 0xff : (((outy[outy1]) < 0) ? 0 : (outy[outy1])));
      *pic0++ = (unsigned char)(((128 + outu[outu1]) > 0xFF) ? 0xff : (((128 + outu[outu1]) < 0) ? 0 : (128 + outu[outu1])));
      *pic0++ = (unsigned char)(((outy[outy1 + 1]) > 0xFF) ? 0xff : (((outy[outy1 + 1]) < 0) ? 0 : (outy[outy1 + 1])));
      *pic0++ = (unsigned char)(((128 + outv[outv1]) > 0xFF) ? 0xff : (((128 + outv[outv1]) < 0) ? 0 : (128 + outv[outv1])));
      *pic1++ = (unsigned char)(((outy[outy2]) > 0xFF) ? 0xff : (((outy[outy2]) < 0) ? 0 : (outy[outy2])));
      *pic1++ = (unsigned char)(((128 + outu[outu1 + 8]) > 0xFF) ? 0xff : (((128 + outu[outu1 + 8]) < 0) ? 0 : (128 + outu[outu1 + 8])));
      *pic1++ = (unsigned char)(((outy[outy2 + 1]) > 0xFF) ? 0xff : (((outy[outy2 + 1]) < 0) ? 0 : (outy[outy2 + 1])));
      *pic1++ = (unsigned char)(((128 + outv[outv1 + 8]) > 0xFF) ? 0xff : (((128 + outv[outv1 + 8]) < 0) ? 0 : (128 + outv[outv1 + 8])));
      outv1 += 2;
      outu1 += 2;
      outy1 += 2;
      outy2 += 2;
    }
    outy += 16;
    outu += 16;
    outv += 16;
    outv1 = 0;
    outu1 = 0;
    outy1 = 0;
    outy2 = 8;
    pic0 += 2 * (width - 8);
    pic1 += 2 * (width - 8);
  }
}
```